Laravel 8 一对多

2021-07-19 11:34 更新

一对多关联用于定义单个模型拥有任意数量的其它关联模型。例如,一篇博客文章可能会有无限条评论。正如其它所有的 Eloquent 关联一样,一对多关联的定义也是在 Eloquent 模型中写一个方法:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    /**
     * 获取博客文章的评论
     */
    public function comments()
    {
        return $this->hasMany('App\Models\Comment');
    }
} 

记住一点,Eloquent 将会自动确定 Comment 模型的外键属性。按照约定,Eloquent 将会使用所属模型名称的「Snake Case」形式,再加上 _id 后缀作为外键字段。因此,在上面这个例子中,Eloquent 将假定 Comment 模型对应到 Post 模型上的外键就是 post_id

一旦关系被定义好以后,就可以通过访问 Post 模型的 comments 属性来获取评论的集合。记住,由于 Eloquent 提供了「动态属性,因此我们可以像访问模型的属性一样访问关联方法:

$comments = App\Models\Post::find(1)->comments;

foreach ($comments as $comment) {
    //
} 

当然,由于所有的关联还可以作为查询语句构造器使用,因此你可以使用链式调用的方式,在 comments 方法上添加额外的约束条件:

$comment = App\Models\Post::find(1)->comments()->where('title', 'foo')->first(); 

正如 hasOne 方法一样,你也可以通过向 hasMany 方法传递附加参数来覆盖默认的外键和本地键:

return $this->hasMany('App\Models\Comment', 'foreign_key');

return $this->hasMany('App\Models\Comment', 'foreign_key', 'local_key'); 
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号