阅读(2437) (9)

Laravel 8 获取中间表字段

2021-07-07 11:41:20 更新

就如你刚才所了解的一样,多对多的关联关系需要一个中间表来提供支持, Eloquent 提供了一些有用的方法来和这张表进行交互。例如,假设我们的 User 对象关联了多个 Role 对象。在获得这些关联对象后,可以使用模型的 pivot 属性访问中间表的属性:

$user = App\Models\User::find(1);

foreach ($user->roles as $role) {
    echo $role->pivot->created_at;
} 

需要注意的是,我们获取的每个 Role 模型对象,都会被自动赋予 pivot 属性,它代表中间表的一个模型对象,并且可以像其他的 Eloquent 模型一样使用。

默认情况下,pivot 对象只包含两个关联模型的主键,如果你的中间表里还有其他额外字段,你必须在定义关联时明确指出:

return $this->belongsToMany('App\Models\Role')->withPivot('column1', 'column2'); 

如果你想让中间表自动维护 created_atupdated_at 时间戳,那么在定义关联时附加上 withTimestamps 方法即可:

return $this->belongsToMany('App\Models\Role')->withTimestamps(); 

注意:在数据透视表上使用时间戳时,该表必须同时具有 created_atupdated_at 时间戳字段。