【发布时间】:2021-06-04 21:13:29
【问题描述】:
我正在开发一个 Laravel 应用程序,我有如下多对多关系:
我有 authors 表、writings 表和 author_writing 表。 author_writing 表有一个名为 role_id 的额外字段,其中包含作者在该书中的角色 ID,例如共同作者、编辑……等。 我想得到一个作者的所有作品,以及一个作者在书中的所有角色:我目前得到的是:
[
{
"id":1,
"book_name": "xyz",
.
.
.
"pivot": {
"writing_id": 4,
"author_id": 4,
"role_id": 1
},
},
{
"id":1,
"book_name": "xyz",
.
.
.
"pivot": {
"writing_id": 4,
"author_id": 4,
"role_id": 2
},
},
{
"id":1,
"book_name": "xyz",
.
.
.
"pivot": {
"writing_id": 4,
"author_id": 4,
"role_id": 4
},
},
]
我通过调用得到这个结果:
public function writings(){
return $this->belongsToMany(Writing::class, 'author_writing', 'author_id', 'writing_id')
->withPivot([
'role_id'
]);
}
所以写作条目是重复的,因为作者有不止一个角色,所以如果作者有三个角色,那么相同的写作会显示3次,唯一的区别是pivot中的role_id。 锄头可以显示如下内容:
[
{
"id":1,
"book_name": "xyz",
.
.
.
"pivot": {
"writing_id": 4,
"author_id": 4,
"role_id": [1,2, 4]
},
},
]
所以只有一个条目,但 role_id 包含作者在写作中的所有角色。
【问题讨论】: