Laravel 关系上的枢轴关系 (Eloquent)
Posted
技术标签:
【中文标题】Laravel 关系上的枢轴关系 (Eloquent)【英文标题】:Laravel pivot relationship on relationship (Eloquent) 【发布时间】:2019-07-27 20:53:08 【问题描述】:在 Laravel 中,是否可以将关系放入关系中?
基本上,我已经建立了一个关系,但是我需要另一个关系来建立该关系(如果这有意义的话)。
我的两个模型:
商店 供应商我的商店和供应商关系模型:
供应商商店 store_id supplier_id如您所见,我有许多 stores 和 suppliers,每个人都可以通过 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)的主要内容,如果未能解决你的问题,请参考以下文章