一对多
假如现有数据表
- user---用户表--字段为 id,name
- article--文章表--字段为id,title,content,user_id
- comment--评论表--字段为id,content,article_id,user_id
表之间的关系为
- 一个用户有多个文章
- 一个用户有多个评论
- 一篇文章有多个评论
在tp5中的代码表示为
//User模型
public function Articles()
{
//第一个参数为要绑定的模型名称
//第二个参数为要绑定的模型的外键
//第三个参数为自身的主键
return $this->hasMany('Article');
}
public function Comments()
{
return $this->hasMany('Comment');
}
//Article模型
public function User()
{
//第一个参数为要绑定的模型名称
//第二个参数为自身的外键
//第三个参数为要绑定的模型的主键
return $this->belongsTo('User');
}
public function Comments()
{
return $this->hasMany('Comment');
}
//Comment模型
public function User()
{
return $this->belongsTo('User');
}
public function Article()
{
return $this->belongsTo('Article');
}
使用
public function index()
{
//查出用户并预载入关联的文章表,评论表
$user = User::get(1,'Articles,Comments');
//此处调用的是user关联的article对象集数组,里面的每一个值都是一个article对象
//获取单一文章的title属性---$user->Articles[0]->title
dump($user->Articles);
//此处调用的是user与article关联的HasMany对象,包含了它们的关联关系等等
//相似于Article::where('user_id',1)这个查询对象
dump($user->Articles());
//获取用户评论的方法同获取文章表一样
/********************************************************************/
//查出文章并与载入关联的用户表
$article = Article::get(1,'User');
//此处调用的是article关联的user对象
//获取用户的name属性---$article->User->name
dump($article->User);
//此处调用的是article与user关联的BelongsTo对象
//相似于User::where('id',$article->user_id)这个查询对象
dump($article->User());
/******************************************************************/
//获取user关联的article关联的comment对象集数组
dump($user->Articles->Comments);
//获取user关联的article关联的comment的HasMany查询对象
dump($user->Articles->Comments());
//获取article关联的user关联的comment对象集数组
dump($article->User->Comments);
//获取article关联的user关联的comment的HasMany查询对象
dump($article->User->Comments());
}