Laravel 关系上的枢轴关系 (Eloquent)

Posted

技术标签:

【中文标题】Laravel 关系上的枢轴关系 (Eloquent)【英文标题】:Laravel pivot relationship on relationship (Eloquent) 【发布时间】:2019-07-27 20:53:08 【问题描述】:

在 Laravel 中,是否可以将关系放入关系中?

基本上,我已经建立了一个关系,但是我需要另一个关系来建立该关系(如果这有意义的话)。

我的两个模型:

商店 供应商

我的商店和供应商关系模型:

供应商商店 store_id supplier_id

如您所见,我有许多 storessuppliers,每个人都可以通过 SupplierStore 表相互关联。

这很好用。

我的问题是对于每个关系(商店和供应商)可以有 许多交货天数。

我的 HasMany 关系:

DeliveryDay
supplier_store_id
day

我想如果我进入 SupplierStore 模型并添加:

public function days()

 return $this->hasMany('App\DeliveryDay');

可行,但我似乎无法通过 eloquent 访问这些数据?

我希望做这样的事情:

$supplier = 供应商::find($id); $supplier->store->pivot->days

枢轴(SupplierStore)将保存该特定关系的关系,我可以抓住日子。

谁能帮我弄清楚我需要做什么才能实现这一目标?非常感谢您的时间。谷歌搜索了几个小时后,我的头好痛。 :)

【问题讨论】:

SupplierStore 已经是模型了吗? hasManyThrough? - laravel.com/docs/5.8/eloquent-relationships#has-many-through 可能是***.com/questions/17367440/…的副本 是的,SupplierStore 是一个模型。它是用于供应商和商店之间的 BelongsToMany 关系的模型。该模型本身也具有 HasMany 与 DeliveryDays 的关系。 我遇到了同样的问题。我需要在数据透视模型中定义一个关系,以便更轻松地进行查询。你是怎么解决的? 【参考方案1】:

您可以像这样访问每一天:

public function getDays($id)

 $supplier = Supllier::find($id);

 foreach($supplier->stores() as $store)
 
   foreach($store->days() as $day)
   
    echo $day->day;
   
 

或者得到所有的日子

$supplier->stores->days;

【讨论】:

嗨卢卡斯,感谢您的帮助。但我不认为你的建议是解决方案。我想访问关系中的关系。例如 $supplier->store->pivot->days 哦,我的错,所以你想使用你的供应商模型来访问这些日子吗? 是的,伙计,这似乎是不可能的。这太糟糕了!如果我 dd($supplier->stores->pivot) - 有一个关系行,但它是一个空白数组,它没有我添加到关系中的 days() 关系。真的很奇怪。 $supplier->stores 你能 dd 这个看看是否返回你的 SupplierModel 吗?如果您可以使用 foreach 循环访问这些日子 所以如果我做这样的事情。 $supplier->stores->first(),它将显示第一个关系。然后我可以做 $supplier->stores->first()->pivot 这将向我展示实际的关系模型。在“枢轴”内部,我看不到天数,即使我尝试说 $supplier->stores->pivot->days 它认为它是我的 SupplierStore 模型上的列而不是关系。如果我做 $supplier->stores->pivot->days() 它只是说函数不存在。

以上是关于Laravel 关系上的枢轴关系 (Eloquent)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:向枢轴模型添加关系

Laravel 与枢轴的多态关系

Laravel Eloquent 嵌套关系枢轴与约束

Laravel 8:在空的多对多关系中使用枢轴时出错

Laravel Eloquent Query 包含枢轴和关系

Laravel中的多重关系(枢轴)