我有三个模型和相关表格:公司、销售公司、合作公司。
在公司表中,我想存储公司的一般信息,如名称,银行账户,身份证和诸如此类的东西。在另外两个表中,我将根据公司的类型(销售公司或合作公司(存储不同的信息。
由于这种逻辑,我需要在这些表之间建立多态的一对一关系。
在我的公司表中,我有两列:firmable_id
和firmable_type
。
企业模型和SaleFirm/PartnerFirm模型之间的关系如下:
class Firm extends Model {
public function firmable()
{
return $this->morphTo();
}
}
class PartnerFirm extends Model {
public function firm()
{
return $this->morphOne(Firm::class, 'firmable');
}
}
我的问题是:如何基于firmable_type
获取所有记录,而不是基于模型名称?我可以使用关系来做这件事吗?或者我需要做这样的事情:Firm::where('firmable_type','pathtoPartnerFirm')->get()
?
试试这个:
$firms = Firm::whereHasMorph('firmable', [PartnerFirm::class])->get();
这应该输出这样的查询:
=>"从
firms
中选择*,其中((firmable_type
=?并且存在(从partner_firms
中选择*(,其中firms
.firmable_id
=partner_firms
.id
(("和CCD_ 12。deleted_at
为空">
米拉伊·汗的做法也应该奏效:
$firms = Firm::whereHasMorph('firmable','AppPartnerFirm')->get();
它将执行相同的查询:
=>"从
firms
中选择*,其中((firmable_type
=?并且存在(从partner_firms
中选择*(,其中firms
.firmable_id
=partner_firms
.id
((和CCD_ 21。deleted_at
为空">
在您报告的错误中:
未找到列:1054 where子句中的未知列"has_morph">
似乎将方法whereHasMorph()
视为where()
-one(where('has_morph', '...')
(的加糖版本
您可以尝试如下检索所有Morph模型。查询多态关系
$PartnerFirm = Firm::whereHasMorph('firmable','AppPartnerFirm')->get();