【发布时间】:2019-10-11 17:09:27
【问题描述】:
我正在尝试从我的 Lists 表中获取数据,并包含一个包含该列表中曲目 ID 的数组。
这是一个数据库模型示例,具有关系 N:M。
在我的 List 模型中,我添加了这个方法:
public function tracks()
{
return $this->belongsToMany(Track::class, 'List_Tracks', 'id_list', 'id_track');
}
所以,在我的 ListController 中,我正在执行以下操作:
$list = List::find($id);
$list->tracks_list = $list->tracks->pluck('track_id');
return $list;
我得到的是与我在同一个列表中的曲目一样多的对象,例如:
[
{
"id_track": 1,
"name": "Yesterday",
"tracks_list": [
1,
2
]
"pivot": {
"id_list": 1,
"id_track": 1
}
},
{
"id_track": 2,
"name": "Lucy in the sky with diamonds",
"pivot": {
"id_list": 1,
"id_track": 2
}
}
]
但我想得到的是:
{
"id_list": 1,
"name": "The Best of The Beatles",
"tracks_list": [
1,
2
]
}
我认为我尝试过的事情比正确的解决方案要复杂得多。
您将如何以这种方式获取数据?
提前致谢。
【问题讨论】:
-
你试过
List::find($id)->with('tracks');吗?我认为应该从关系而不是数据透视表中获取数据。您可能需要稍微更改调用 =List::with('tracks')->where('id', '=', $id)->first()。 -
@Silencesys 没错,它带来了整个对象,这让我觉得也许我只需要数组中的 ID,例如:{“id_list”:1,“name”:“ The Best of The Beatles", "tracks": [ 1, 2 ] } Laravel 有什么方法可以轻松做到这一点?