2017-08-08 1 views
0

Ich habe zwei Tabellen Inventories und Inventory_images erstellt. Der Primärschlüssel der Inventory-Tabelle ist der Fremdschlüssel der Tabelle inventory_images. Jetzt versuche ich, alle Images desselben Inventars abzurufen, bekomme aber einen Fehler. Hier ist mein CodeFremdschlüssel-Beziehungen funktionieren nicht in Laravel

Inventar Modell:

/** 
* The table name that should be hidden from other modules 
*/ 
protected $table = 'inventories'; 


protected $PrimaryKey = 'id'; 

public function test(){ 
    return $this->belongsTo('App\InventoryImage', 'i_id'); 
} 

InventoryImage Modell:

protected $table = 'inventory_images'; 

protected $PrimaryKey = 'id'; 

public function inv_det(){ 
    return $this->belongsTo('App\Inventory', 'id'); 
} 

Controller:

$inventory = Inventory::with('test')->orderBy('id', 'DESC')->paginate('10'); 
     dd($inventory); 

Kann jemand mir bitte helfen

das Problem herauszufinden
+0

Was ist der Fehler? – Nima

+0

Aufruf zu undefinierter Beziehung [Test] zu Modell [App \ Inventory]. Dies ist der Fehler – Mohsin

Antwort

0

Sie machen einige Fehler in Ihrem Code, die Sie zuerst lösen sollten (und die Ihnen helfen könnten, Ihr Problem zu lösen).

Zuerst wird der Variablenname den Primärschlüssel überschrieben werden soll $primaryKey und nicht $PrimaryKey (Variablennamen normalerweise immer mit einem kleinen Buchstaben beginnen. Dies sollte keinen Einfluss hat aber, da Laravel das Primärschlüsselfeld übernimmt namentlich genannt werden id sowieso.

Noch wichtiger ist, sind Sie in beiden Fällen die belongsTo Methode verwenden, obwohl in einem Fall sollte es hasMany sein. in einer 1-n Beziehung sollte das übergeordnete Modell die hasMany Beziehung zurückzukehren, und das Kind-Modell (das hält die Spalte mit dem Fremdschlüssel) belongsTo.

Darüber hinaus ist das zweite Argument der hasMany-Methode oder der doesonsTo-Methode der Name der Fremdschlüsselspalte, falls diese sich von der Snake-Case-Repräsentation des Modells unterscheidet (angehängt von _id). Wenn also Ihre inventory_images Tabelle eine anders benannte Fremdschlüsselspalte als inventory_id hat, müssen Sie das zweite Argument mit dem richtigen Namen übergeben. Ich nehme an, dass der Name Ihres Fremdschlüssels i_id lautet, Sie müssen ihn also an beide Funktionen übergeben.

https://laravel.com/docs/5.4/eloquent-relationships#one-to-many

Bitte überprüfen Sie, ob das funktioniert:

/** 
* The table name that should be hidden from other modules 
*/ 
protected $table = 'inventories'; 


protected $primaryKey = 'id'; 

public function test(){ 
    return $this->hasMany('App\InventoryImage', 'i_id'); 
} 

Und das Kind Tabelle:

protected $table = 'inventory_images'; 

protected $primaryKey = 'id'; 

public function inv_det(){ 
    return $this->belongsTo('App\Inventory', 'i_id'); 
} 
+0

Ich habe Ihre Lösung versucht, aber jetzt gibt es mir einen weiteren Fehler – Mohsin

+0

Der Versuch, die Eigenschaft von Nicht-Objekt zu bekommen – Mohsin

Verwandte Themen