TP5中CURD那点事儿(五)

2018-05-07  本文已影响332人  铁匠简记
模型关联
    一般说来模型关系包括
    一对一  HAS_ONE   BELONG_TO
    一对多  HAS_MANY  BELONG_TO
    多对多  BELONGS_TO_MANY

    一对多  一用户 -> 多条评论
    Model层  User模型  Comment模型  对应两张表名
    User.php中 创建一个public comm() 方法
    public function comm()
    {
        //这是一个关系模型
        return $this->hasMany('Comment','uid','user_id');//前两个参数属于一张表,最后一个参数和本模型同表
    }
    在控制器中调用
    $user = User::get(1);
    $user -> comm;//调用属性,其实就是那个方法,就相当于user表和comment表join,返回二维数组这个人的所有评论
    //注意:调用属性返回数据记录对象,调用方法返回关联模型
    $user中指定id,则返回id为1的用户的多条评论。
    $user ->comm()//调用方法返回关系模型对象
        ->where('content','东西不错')->find();
    返回id为1 content为条件的一条评论
新增:
    $user = User::get(1);
    1、新增一条评论
    $comment = new Content();  //一个Model对应于一张评论表
    $comment -> content = '不错不错,赞一个';
    $user -> comm()->save($comment);
    2、新增多条评论 ,评论表一人评论多条
    $comment = [
        ['comment'=> '不错不错,赞一个'],
        ['comment'=> '不错不错,赞2个'],
        ['comment'=> '不错不错,赞6个'],
    ];
    $user->comm()->saveAll($comment);

关联查询:
    1、$user = User::get(1,'comm');//这里关联的是方法名,返回用户+评论
    2、带where时,$user = User::get(1);
    $user->comm()->where('is_show',1)->select();
    3、getBy 操作,$user->comm()->getByContent('动西不错');
    其他查询操作:
    User::has('comm')->select();查询有过评论的用户
    User::has('comm','>=',2)->select();评论2次以上;
    User::hasWhere('comm',['comment'=>'TP5-666'])->select();返回评论tp5-666的用户

关联更新:
    $user = User::get(1);
    $comm = $user ->comm()->getByContent('tp5-666');
    $comm->content = 'tp5-5555';
    $comm->save();
    用查询构建器的update()方法进行更新
    $user = User::get(1);
    $user -> comm() ->where('content','tp5-666')->update(['content'=>'Tp5-666']);

删除一条
    $user = User::get(1);
    comm = $user ->comm()->getByContent('Tp5-666');如果返回的comm为空,则调用delete会报错;
    comm->delete();
    删除所有的关联数据
    $user -> User::get(1);
    $user -> comm()->delete();  //删除所有的该用户的评论


一对一模型  (一人一车模型)
    建立对应user表和car表的模型,
    user.php模型中
    protected function car()
    {
        return $this->hasOne('Car','uid','userid');
    }
    Car.php暂时为空模型
    以下为控制器操作:
查询操作
    $user = User::get(1);
    $user -> email;返回user表对应用户的email字段信息
    $user -> car;//返回记录对象
    $user -> car -> brand; 返回车表相应字段,车牌号
    $user = User::get(2016,'car');//返回id为2016的用户的人、车记录信息--查两个表

新增/更新
    $user = User::get(1); //调用save()方法为更新操作
    $user = new User;     //调用save()方法为新增操作
    $user -> email = '30292510@qq.com';
    if ($user->save()){
        $user->car ->brand = '苏C23456';
        $user -> save();
        return '成功';
    }else{
        return $user->getError();
    }

删除关联
    $user - User::get(2016);
    if ($user->delete()){
        $user ->car ->delete();
    }
上一篇下一篇

猜你喜欢

热点阅读