2017-03-06 87 views
1

我试图使用雄辩关系连接3个表格,但它没有给出预期的结果。(Laravel)使用“雄辩关系”加入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个表中的所有数据,但在第二个只返回版本,这就是我想要

我只希望有这三个表不是一切

我在做什么错之间关系的数据?

回答

0

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

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

我得到这个错误将nvarchar值'shipmentcategory'转换为数据类型int时,转换失败......我认为只适用于int值,而shipmentcategory不是! –

+0

@Ahmadz No. has()方法与关系存在有关。并且错误可能是由于[]。我已经更新了答案。 –

+0

我试图删除数组,但仍然是相同的错误。所有列类型都是Nchar –