(Laravel) 使用“雄辩的关系”连接 3 个或更多表

Posted

技术标签:

【中文标题】(Laravel) 使用“雄辩的关系”连接 3 个或更多表【英文标题】:(Laravel) Join 3 or more tables using "Eloquent Relationships" 【发布时间】:2017-07-26 07:46:48 【问题描述】:

我正在尝试使用 eloquent 关系连接 3 个表,但它没有给出预期的结果。

出货型号

class Shipment extends Model

    protected $table = 'ccctadm.Shipment';

    public function customergroupcode()
    
        return $this->hasMany(DocumentRuleSet::class,'customergroupcode','customergroupcode');
    
    public function shipmentcategory()
    
        return $this->hasMany(DocumentRuleSet::class,'shipmentcategory','shipmentcategory');
    

    public function status()
    
        return $this->hasMany(DocumentRuleSet::class,'status','status');
     
 

获取我正在使用此代码的数据

   $shipment_data = Shipment::With(['customergroupcode' , 'shipmentcategory','status'])->
Where('shipment_cycle','!=','closed')->get();

我正在尝试使它等同于这个查询

 select B.rulesetname,B.icon ,COUNT(*)As Total  from
[ccct].[ccctadm]. [Shipment] A  INNER  JOIN 
[ccct].[ccctadm].[documentruleset] B
     ON
      A.customergroupcode = B.customergroupcode  AND A.shipmentcategory =  
   B.shipmentcategory AND A.status = B.status INNER
JOIN [ccctadm].[shipassign] S ON  A.id = S.shipmentid AND
 A.shipment_cycle != 'closed'  GROUP BY  rulesetname,B.icon

第一个查询返回 3 个表中的所有数据,但是当第二个查询仅返回 Release 时,这是我想要的

我只想要这三个表之间有关系的数据而不是全部

我做错了什么?

【问题讨论】:

【参考方案1】:

使用has() 方法。它根据关系的存在来限制记录。

$shipment_data = Shipment::has('customergroupcode' , 'shipmentcategory','status')->
Where('shipment_cycle','!=','closed')->get();

【讨论】:

我收到此错误将 nvarchar 值 'shipmentcategory' 转换为数据类型 int 时出现此错误......我认为仅适用于 int 值,而 shippingcategory 则不是!跨度> @Ahmadz No. has() 方法与关系存在有关。错误可能是由于[]。我已经更新了答案。 我试图删除阵列,但仍然是同样的错误。所有列类型均为 Nchar @AhmadzIssa 你确定with() 方法工作正常吗? 子查询中 count() 导致的错误---将 nvarchar 值 'shipmentcategory' 转换为数据类型 int 时转换失败。 (SQL: select * from [ccctadm].[Shipment] where (select count() from [ccctadm].[documentruleset] where [ccctadm].[Shipment].[customergroupcode] = [ccctadm].[documentruleset ].[customergroupcode]) = shippingcategory and [shipment_cycle] != closed)

以上是关于(Laravel) 使用“雄辩的关系”连接 3 个或更多表的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 节省雄辩的关系

laravel 雄辩的关系 3 模型

Laravel 7雄辩的关系不起作用

在 Laravel 中迁移外键与雄辩的关系

雄辩的关系 laravel

Laravel 雄辩的关系有很多两个外键错误