模型关联
一般说来模型关系包括
一对一 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();
}
网友评论