- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有几张这样的 table ......
FreeLook
- id
SignVendor
- id
PaintVendor
- id
VendorJob
- vendor_id
- vendor_type
- free_look_id
- quote_id
Quote
- id
当为 FreeLook
选择 PaintVendor
或 SignVendor
时,将创建一个 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
或 相关的报价供应商作业
我是否需要为所有这些编写自定义 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/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!