2017-03-23 266 views
0

你好我试图找出如何在口若悬河,你可以定义这种关系定义一个链接表的主键从表关系例如:用雄辩的Laravel

return $this->belongsToMany('App\Models\EquipmentType','equipment_types_manufacturers', 
     'manufacturer_id', 'equipment_type_id'); 

但是,试图定义关系,我找不到你如何定义从equipment_model链接FK etml_id - > equipment_types_manufacturers PK

return $this->hasMany('App\Models\EquipmentType','equipment_types_manufacturers', 
     'equipment_types_manufacturers_id', 'equipment_type_id'); 

其中在SQL失败

SQLSTATE [42S22]:列未找到:1054未知列在 'where子句'(SQL 'manufacturers.equipment_types_manufacturers_id':SELECT * FROM equipment_models其中存在(SELECT * FROM manufacturers哪里equipment_modelsequipment_types_manufacturers_id = manufacturersequipment_types_manufacturers_idmanufacturer_id = 1)和存在(来自equipment_types其中equipment_models选择*。equipment_types_manufacturers_id = equipment_typesequipment_types_manufacturers_idequipment_type_id = 1))

我感觉这可以通过创建的链接表的模型来实现,但是我”我不确定这是否正确?

+0

更新:我现在想用这个 $车型查询= EquipmentModel ::有( 'equipmentTypesManufacturer.manufacturer') - >使用( [ 'equipmentTypesManufacturer'=>功能($查询){$ 查询 - >其中([[ 'MANUFACTURER_ID',5],[ 'equipment_type_id',5]]);} , 'equipmentTypesManufacturer.manufacturer' , 'equipmentTypesManufacturer.equipmentType']) - > get() ; 这将工作,但你会永远得到顶级模型? – jwtea

回答

0

您正试图通过另一个模型/表格获取模型。您需要使用hasManyThrough()。在您的制造商的模式,尝试

public function equipments() { 
    return $this->hasManyThrough(
     'EquipmentModel', 'EquipmentTypesManufacturer', 
     'manufacturer_id', 'etml_id', 'id' 
    ); 
} 

在这里阅读更多:https://laravel.com/docs/5.4/eloquent-relationships#has-many-through

+0

您是否必须为每个想要使用的链接表创建一个模型? – jwtea

+0

是的,你将不得不。这就是ManyManyThrough工作的原因 – EddyTheDove

+0

感谢您澄清,但是这种方法没有达到我所需要的。似乎没有办法指定他们将EquipmentModel加入链接表的关键,因此它总是在查找条目EquipmentModel.id - > EquipmentTypesManufacturer.id? – jwtea