2017-03-23 11 views
0

Hallo Ich versuche, herauszufinden, wie in beredten Sie diese Beziehung definieren: Image Of SchemaBeziehung aus der Tabelle mit Link-Tabellen Primärschlüssel Eloquent Laravel

ich viele gehört verwendet, um die Hersteller zu verbinden und Gerätetypen zusammen zB:

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

Doch der Versuch, die Beziehung zu definieren, kann ich nicht finden, wie Sie den Link aus dem equipment_model definieren FK etml_id -> PK

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

, die in SQL

SQLSTATE versagt [42S22]: Column nicht gefunden: 1054 Unknown column 'manufacturers.equipment_types_manufacturers_id' in 'where clause' (SQL: select * from equipment_models wo vorhanden ist (select * from manufacturers wo equipment_models. equipment_types_manufacturers_id = manufacturers. equipment_types_manufacturers_id und manufacturer_id = 1) und existiert (select * from equipment_types wo equipment_models. equipment_types_manufacturers_id = equipment_types. equipment_types_manufacturers_id und equipment_type_id = 1))

Ich empfinde dies durch die Schaffung eines Modells für die Verknüpfungstabelle erreicht werden kann, aber ich bin ich mir nicht sicher, ob das stimmt?

+0

Update: Ich bin jetzt versuchen, mit Hilfe dieser $ Modelle abfragen = EquipmentModel :: hat ('equipmentTypesManufacturer.manufacturer') -> mit ( [ 'equipmentTypesManufacturer' => function ($ query) { $ query-> where ([[ 'MANUFACTURER_ID', 5], [ 'equipment_type_id', 5]]);} , 'equipmentTypesManufacturer.manufacturer' , 'equipmentTypesManufacturer.equipmentType']) -> get() ; Dies funktioniert, aber Sie werden immer das Top-Level-Modell bekommen? – jwtea

Antwort

0

Sie versuchen, ein Modell über ein anderes Modell/eine andere Tabelle zu erhalten. Sie müssen hasManyThrough() verwenden. In Ihrem Hersteller Modell, versuchen

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

Lesen Sie mehr hier: https://laravel.com/docs/5.4/eloquent-relationships#has-many-through

+0

Müssen Sie für jede Verknüpfungstabelle, die Sie dann verwenden möchten, ein Modell erstellen? – jwtea

+0

Ja, Sie müssen. So funktioniert, funktioniertManyThrough – EddyTheDove

+0

Danke, dass du das geklärt hast, aber diese Methode erreicht nicht das, was ich brauche. Es scheint keine Möglichkeit zu geben, den Schlüssel anzugeben, um das EquipmentModel mit der Verknüpfungstabelle zu verbinden, so dass es immer nach einem Eintrag EquipmentModel.id -> EquipmentTypesManufacturer.id sucht? – jwtea

Verwandte Themen