(Laravel)使用“雄辩关系”加入3个或更多表格
问题描述:
我试图使用雄辩关系连接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个表中的所有数据,但在第二个只返回版本,这就是我想要
我只希望有这三个表不是一切
我在做什么错之间关系的数据?
答
使用has()
方法。它根据关系的存在来限制记录。
$shipment_data = Shipment::has('customergroupcode' , 'shipmentcategory','status')->
Where('shipment_cycle','!=','closed')->get();
我得到这个错误将nvarchar值'shipmentcategory'转换为数据类型int时,转换失败......我认为只适用于int值,而shipmentcategory不是! –
@Ahmadz No. has()方法与关系存在有关。并且错误可能是由于[]。我已经更新了答案。 –
我试图删除数组,但仍然是相同的错误。所有列类型都是Nchar –