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

TP5中CURD那点事儿(五)

作者: 铁匠简记 | 来源:发表于2018-05-07 11:47 被阅读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();
        }
    

    相关文章

      网友评论

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

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