1

我有 3 个模型和相关表:Firm、SaleFirm、PartnerFirm。

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

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

在我的公司表中,我有 2 列:firmable_idfirmable_type

Firm Model 和 SaleFirm/PartnerFirm Model 之间的关系是这样的:

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','path\to\PartnerFirm')->get()

4

2 回答 2

0

你可以试试这个来检索你所有的变形模型,如下所示。查询多态关系

$PartnerFirm = Firm::whereHasMorph('firmable','App\PartnerFirm')->get();
于 2019-11-22T17:13:46.460 回答
0

尝试这个:

$firms = Firm::whereHasMorph('firmable', [PartnerFirm::class])->get();

这应该输出这样的查询:

=>“select * from firmswhere (( firmable_type= ? and exists (select * from partner_firmswhere firms. firmable_id= partner_firms. id))) and firms. deleted_atis null”

Miraj Khan 博士的做法也应该有效:

$firms = Firm::whereHasMorph('firmable','App\PartnerFirm')->get();

它将执行相同的查询:

=>“select * from firmswhere (( firmable_type= ? and exists (select * from partner_firmswhere firms. firmable_id= partner_firms. id))) and firms. deleted_atis null”

在您报告的错误中:

未找到列:1054 'where 子句中的未知列'has_morph'

似乎将这种方法whereHasMorph()视为where()一种 ( where('has_morph', '...'))的糖化版本

于 2019-11-27T01:14:24.600 回答