TP5中CURD那点事儿(六)

多对多模型  
背景:快递配送区域shipping_area  地区region  + 一张关系表,
    一个配送区域对应多个城市地区,
    比如:一线城市这个配送区域 ——> 北上广深 ; 还有东三省、珠三角、江浙沪、偏远地区等...

    一个地区也有可能对应多个配送区域,
    比如:北京 ——> (首都、一线城市)

    region.php 区域模型中
        return $this -> belongsToMany('ShipingArea','tp_area_region','id1','id2');
    ShipingArea.php 配送区域模型中建立同样方法
    注意:两个关联id的顺序为关联表中的顺序

新增/更新
    1、向一个表插数据,会触发关联表同时完成
        $region = Region::getByName('北京市');
        $region -> ShipingArea() ->save(['shiping_area_name' => '中国首都']);
    如上:
        shipping_area表中增加一条记录中国首都,此时关系表中增加一条关联记录

    2、给当前用户加多个角色
        $user = User::getById(30);
        $user -> role() -> saveAll([
                    ['role_name' => '角色1'],
                    ['role_name' => '角色2'],
                    ['role_name' => '角色3'],
                ]);

    3、给一个地区添加一个现有的配送区域,实则在关联表添加一条关联记录
        $region = Region::get(355);//现有地区
        $ShipingArea = ShipingArea::getByShipingAreaName('珠三角'); //现有配送区域
        调用attach()
        $region -> shipingArea()->attach($ShipingArea);//这里可以直接传珠三角的id

删除关联
    $region = Region::getByName('北京市'); //返回北京
    $ShipingArea = ShipingArea::get(2); //返回首都
    $region -> shipingArea()->detach($ShipingArea);// 只删除关系表关联记录
    $region -> shipingArea()->detach($ShipingArea,true);// 删除关联记录同时删除shipingArea中对应的记录(首都)

查询
    $region::get(2014,'shipingArea'); //这里传的方法名,查询的是多表

    $region::get(2014); //不传第二参数可执行以下操作
    $region ->shipingArea[0]-> 字段名


Model层中读取器
    protected function getUserStatusAttr($value,$data)
    {
        $status = [ -1 => '删除', 0 => '禁用' , 1 => '正常', 2 => '待审核'];
        return $status[$data['status']];
    }

模型输出数据库中没有的字段
Controller层

    使用toArray方法将当前的模型实例输出为数组
    数组输出的字段值会经过获取器的处理,也可以支持追加其它获取器定义(不在数据表字段列表中)的字段
    $user -> append(['user_status']) ->toArray();

    $user = User::find(1);
    $user ->toArray();//将当前的模型实例输出为数组
    $user ->hidden(['reg_time','last_time'])->toArray(); //设置不输出的字段属性
    $user ->visible(['user_id','nickname','email'])->toArray() //设置允许输出的属性
    调用模型的toJson方法进行JSON序列化
    $user ->toJson();

你可能感兴趣的:(TP5中CURD那点事儿(六))