在多态关系中获取基于模型类型的所有记录



我有三个模型和相关表格:公司、销售公司、合作公司。

在公司表中,我想存储公司的一般信息,如名称,银行账户,身份证和诸如此类的东西。在另外两个表中,我将根据公司的类型(销售公司或合作公司(存储不同的信息。

由于这种逻辑,我需要在这些表之间建立多态的一对一关系。

在我的公司表中,我有两列:firmable_idfirmable_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();

最新更新