阅读(4312)
赞(7)
Laravel 8 一对多
2021-07-07 11:41:18 更新
一对多关联用于定义单个模型拥有任意数量的其它关联模型。例如,一篇博客文章可能会有无限条评论。正如其它所有的 Eloquent 关联一样,一对多关联的定义也是在 Eloquent 模型中写一个方法:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Post extends Model
{
/**
* 获取博客文章的评论
*/
public function comments()
{
return $this->hasMany('AppModelsComment');
}
}
记住一点,Eloquent 将会自动确定 Comment
模型的外键属性。按照约定,Eloquent 将会使用所属模型名称的「Snake Case」形式,再加上 _id
后缀作为外键字段。因此,在上面这个例子中,Eloquent 将假定 Comment
模型对应到 Post
模型上的外键就是 post_id
。
一旦关系被定义好以后,就可以通过访问 Post
模型的 comments
属性来获取评论的集合。记住,由于 Eloquent 提供了「动态属性,因此我们可以像访问模型的属性一样访问关联方法:
$comments = AppModelsPost::find(1)->comments;
foreach ($comments as $comment) {
//
}
当然,由于所有的关联还可以作为查询语句构造器使用,因此你可以使用链式调用的方式,在 comments
方法上添加额外的约束条件:
$comment = AppModelsPost::find(1)->comments()->where('title', 'foo')->first();
正如 hasOne
方法一样,你也可以通过向 hasMany
方法传递附加参数来覆盖默认的外键和本地键:
return $this->hasMany('AppModelsComment', 'foreign_key');
return $this->hasMany('AppModelsComment', 'foreign_key', 'local_key');