gpt4 book ai didi

mysql - 具有多态关系的 Laravel 关系结构

转载 作者:行者123 更新时间:2023-11-29 20:12:03 27 4
gpt4 key购买 nike

我有几张这样的 table ......

FreeLook    
- id

SignVendor
- id

PaintVendor
- id

VendorJob
- vendor_id
- vendor_type
- free_look_id
- quote_id

Quote
- id

当为 FreeLook 选择 PaintVendorSignVendor 时,将创建一个 VendorJob 并且它具有多态关系,以便我可以将一个表用于 SignVendorPaintVendor 作业。所以,本质上,我希望能够做到这一点......

FreeLook::find(1)->signVendorJob // gets the sign vendor job from VendorJob for that freelook

在这里,我无法使用 belongsTo 关系,因为我无法区分查询中的标志或油漆供应商(或者至少我不知道一种方法)

FreeLook::find(1)->signVendor // gets the sign vendor for that freelook

问题是我通过 VendorJob 获取标志供应商,而 Laravel 没有 hasOneThrough

FreeLook::find(1)->signVendor->quote // gets the sign vendor quote from VendorJob for that freelook

由于一个 SignVendor 可以有多个 Quote,我只想获取与 FreeLook 相关的报价供应商作业

我是否需要为所有这些编写自定义 MySQL 查询,或者我是否使事情过于复杂,或者只是遗漏了某些内容?

感谢您提供的任何帮助!

最佳答案

您将使用 doc.s 中提到的 morph 关系。

所以在 VendorJob 模型中

// the morph relation 
public function vendorable()
{
return $this->morphTo();
}

// the quote relation
public function quote()
{
return $this->hasOne('App\Quote');
}

以及在 PaintVendor 模型中

 public function paintVendor()
{
return $this->morphMany('App\VendorJob', 'vendorable');
}

对于 SignVendor 也是如此。现在 FreeLook::find(1)->signVendor 将返回所有 signVendor 记录的列表,因此您必须像这样循环它们:

foreach(FreeLook::find(1)->signVendor as $vendor)
{
// fetching the quote of every signVendor related to FreeLook num. 1
$vendor->quote;
}

希望这对您有帮助。

关于mysql - 具有多态关系的 Laravel 关系结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40026746/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com