Laravel 5 根据多态关系中的模型类型获取所有记录

Laravel 5 根据多态关系中的模型类型获取所有记录,laravel-5,eloquent,polymorphic-relationship,Laravel 5,Eloquent,Polymorphic Relationship,我有3个模型和相关表格:公司、销售公司、合伙公司 在公司表中,我想存储公司的一般信息,如名称、银行账户、ID和类似的信息。在另外两个表中,我将根据公司类型(销售公司或合作伙伴公司)存储不同的信息 由于这种逻辑,我需要在这些表之间建立一个多态的一对一关系 在我的公司表中,我有两列:firmable\u id和firmable\u type 公司模式与销售公司/合伙公司模式之间的关系如下: class Firm extends Model { public function firm

我有3个模型和相关表格:公司、销售公司、合伙公司

在公司表中,我想存储公司的一般信息,如名称、银行账户、ID和类似的信息。在另外两个表中,我将根据公司类型(销售公司或合作伙伴公司)存储不同的信息

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

在我的公司表中,我有两列:
firmable\u id
firmable\u type

公司模式与销售公司/合伙公司模式之间的关系如下:

class Firm extends Model {
        public function firmable()
        {
                return $this->morphTo();
        }
}

我的问题是:如何根据
firmable\u type
获取所有记录,因此基于型号名称?我是否可以使用关系来执行此操作,或者我是否需要执行以下操作:
Firm::where('firmable_type','path\to\PartnerFirm')->get()

您可以尝试此操作来检索所有变形模型,如下所示


您可以尝试如下检索所有变形模型

试试这个:

$firms = Firm::whereHasMorph('firmable', [PartnerFirm::class])->get();
这将输出如下查询:

=>“从
公司
所在地选择*(
可确定的公司类型
=?和存在(从
合作伙伴公司
公司所在地
可确定的公司id
=
合作伙伴公司
id)) 而
公司
已删除
处的\u为空”

它的工作方式也应该是:

$firms = Firm::whereHasMorph('firmable','App\PartnerFirm')->get();
它将执行相同的查询:

=>“从
公司
所在地选择*(
可确定的公司类型
=?和存在(从
合作伙伴公司
公司所在地
可确定的公司id
=
合作伙伴公司
id)) 而
公司
已删除
处的\u为空”

在报告的错误中:

找不到列:1054未知列在where子句中“has_morph”

似乎正在将方法
whereHasMorph()
视为
where()
的糖化版本(
where('has_morph','…'))

尝试以下方法:

$firms = Firm::whereHasMorph('firmable', [PartnerFirm::class])->get();
这将输出如下查询:

=>“从
公司
所在地选择*(
可确定的公司类型
=?和存在(从
合作伙伴公司
公司所在地
可确定的公司id
=
合作伙伴公司
id)) 而
公司
已删除
处的\u为空”

它的工作方式也应该是:

$firms = Firm::whereHasMorph('firmable','App\PartnerFirm')->get();
它将执行相同的查询:

=>“从
公司
所在地选择*(
可确定的公司类型
=?和存在(从
合作伙伴公司
公司所在地
可确定的公司id
=
合作伙伴公司
id)) 而
公司
已删除
处的\u为空”

在报告的错误中:

找不到列:1054未知列在where子句中“has_morph”


似乎正在将方法
whereHasMorph()
视为
where()
的糖化版本(
where('has_morph','…'))

这将引发此错误:“未找到列:1054未知列在'where子句'中'has_morph'。这将引发此错误:“找不到列:1054未知列‘where子句’中的‘has_morph’”