2017-03-06 84 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 –