如何获取附加数据透视表的数据?

Posted

技术标签:

【中文标题】如何获取附加数据透视表的数据?【英文标题】:How to get data with pivot data attached? 【发布时间】: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
]

我认为我尝试过的事情比正确的解决方案要复杂得多。

您将如何以这种方式获取数据?

提前致谢。

【问题讨论】:

它似乎与***.com/questions/27434338/… 重复? Laravel: Get pivot data for specific many to many relation的可能重复 你试过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 有什么方法可以轻松做到这一点? 【参考方案1】:

您需要先加载关系,然后编写 eloquent 查询的其余部分,否则您将只能从数据透视表中获取 id 列表。

List::with('tracks')->where('id', '=', $id)->first();
// Following method should work too
List::with('tracks')->find($id);

根据您的评论 - 只获取与列表相关的 id 数组,您不需要加载关系并且只能使用:

List::find($id)->tracks()->pluck('id');
// In case previous method will not work, you can try this one:
List::find($id)->tracks()->pluck('tracks.id');
// before dot should be name of the table, not relationship's.

因此,如果您只需要附加到播放列表的曲目的 ID。我建议将以下方法添加到您的 List 模型中:

// App\Models\List
public function getTrackIdsAttribute()

    return $this->tracks->pluck('id')->toArray();

然后您应该能够简单地调用List::find($id)->trackIds 来获取附加到给定列表的所有曲目ID。如果您不确定我为什么将方法定义为 getTrackIdsAttribute 并仅在模型上调用 trackIds,请查看 Eloquent: Mutators。

【讨论】:

以上是关于如何获取附加数据透视表的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Google App Scripts 从数据透视表中将详细信息表附加为 pdf 或 excel?

复制透视表样式时,系统提示“ excel无法从磁盘内获取数据透视表的源数据”

如何用vba实现数据透视表自动筛选

Excle数据透视表如何移动数据透视表的位置

是否可以通过 Power BI 获取数据透视表的来源?

使用数据透视表数据获取关系表的信息