2017-03-23 268 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