美文网首页
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