我有几张桌子......
FreeLook
- id
SignVendor
- id
PaintVendor
- id
VendorJob
- vendor_id
- vendor_type
- free_look_id
- quote_id
Quote
- id
当为PaintVendor
选择SignVendor
或FreeLook
时,将创建VendorJob
并且它具有多态关系,以便我可以使用一个表SignVendor
和PaintVendor
个职位所以,基本上,我希望能够做到这一点......
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
或VendorJob
我是否需要为所有这些编写自定义MySQL查询,或者我是在过度复杂化,还是只是遗漏了什么?
感谢您提供的任何帮助!
答案 0 :(得分:0)
您将使用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;
}
我希望这会对你有所帮助。