美文网首页
TP5中CURD那点事儿(四)

TP5中CURD那点事儿(四)

作者: 铁匠简记 | 来源:发表于2018-05-07 11:46 被阅读7次
    读取器和修改器
    
    读取器,在Model中编写
        程序在读取属性时自动根据规则检测是否有这个属性对应的方法
        当控制器中实例化并通过对象访问属性会调用此方法 $a 为传过来的属性值 $data 为对象  数据库 ->页面显示 读取过程的操作
        protected function getRegTimeAttr($RegTime,$data)
        {
            // TODO第二个参数$data为整个数据对象名字随便写
            return date('Y-m-d',$RegTime);
            return $data['email'];
        }
        控制器中echo $user->address 时,可以在修改器里边组装数据
    
    修改器
        程序在写入数据时自动根据规则检测是否有这个属性对应的方法
        控制器从表单接收的数据无需转化  页面 -> 数据库 写入过程的操作
        protected function setRegTimeAttr($a)
        {
            //提交过来的数据为$user->reg_time = '2017-10-10';
            return strtotime($a);
        }
    
    
    类型转换  在Model层
        protected $type = [
            'birthday' => 'timestamp:Y-m-d', // 村委时间数
            'nickname' => 'serialize'序列化后存储
            ];
    
    自动完成  在Model层
        可以设置成 update/insert/auto
        protected $update = [
            'sex'=> 0, //也可只配置键名,结合修改器使用,即使控制器中强行设置也不好使
            ];
    
    
    查询范围
        控制器中 User::scope('email')->all();
        可以调用Model层中scopeEmail()方法
        Model中
        protected function scopeEmail($query)//一定要传参
        {
            $query -> where('email','30292510@qq.com');
        }
    
        控制器中可以传多个参数,and关系 如下
        $list = User::scope('email')
            ->scope('level')->all();//Model中两个方法分开写的
        下同
        $list = User::scope('email')      //('email','30292510qq.com')也可以,对应模型中方法接收两个参数,$query -> where('email',$a);
            ->scope('level')
            ->scope(function($query){
                $query -> order('user_id','desc');
            })
            ->all();
    
    
    全局查询范围,不用调用,在使用查询的时候会自动加上去
        protected static function base($query)
        {
            $query -> where('user_id',1);
        }
    
    
    输入和验证
        <input $type="hidden" name="__token__" value="{$request.token}" />
        控制器中 实例化表 $user = new User;
        if ($user->allowField(true)->validate(true)->save(input('post.'))){
            //allowField(false)
            //TODO
        }else{
            return $user -> getError();
        }
    
        1、验证器中验证
        验证器相当于Model,命名要对应数据表 继承validate
        protected $rule = [
            ['','',''],
            ['','',''],
            ['','',''],
        ];
        如验证规则为自定义 需要return错误提示true
    
        2、控制器中验证
        $res = $this -> validate(input('post.'),'User');
        if(true !== $res){
            $user = new User;
            $user -> allowField(true)->save($data);
        }
    
        3、单独验证某字段
        $data = input('post.');
        $check = Validate::is(input('post.birthday'),'date');//验证参数是否为date格式
        $user = new User;
        $user->allowField(true)->save($data);
    

    相关文章

      网友评论

          本文标题:TP5中CURD那点事儿(四)

          本文链接:https://www.haomeiwen.com/subject/wjpmrftx.html