2017-08-08 34 views
0

我製作了兩個表庫存和Inventory_images。 Inventory表的主鍵是inventory_images表的外鍵,現在我試圖獲取同一庫存的所有圖片但出現錯誤。 這裏是我的代碼不在laravel中工作的外鍵關係

庫存模型:

/** 
* 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型號:

protected $table = 'inventory_images'; 

protected $PrimaryKey = 'id'; 

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

控制器:

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

能有人請幫我找出問題

+0

有什麼錯誤? – Nima

+0

調用模型[App \ Inventory]上的未定義關係[測試]。 這是錯誤 – Mohsin

回答

0

你在代碼中犯了一些錯誤,你應該先解決(這可能會幫助你解決你的問題)。

首先,覆蓋主鍵變量的名稱應該是$primaryKey而不是$PrimaryKey(變量名通常總是用小字母開頭。 這應該不會有什麼影響,不過,因爲Laravel假定要命名的主鍵字段id反正。

更重要的是,你在使用belongsTo法這兩種情況下,雖然在一個情況下,它應該是hasMany。在1-n的關係父模型應該返回hasMany關係,子模型(其用外鍵保存列)belongsTo

此外,hasMany或belongsTo方法的第二個參數是外鍵列名,以防與模型的蛇情況表示不同(由_id附加)。因此,如果您的inventory_images表具有除inventory_id以外的不同名稱的外鍵列,則需要使用正確的名稱傳遞第二個參數。我假設你的外鍵名稱是i_id,所以你需要將它傳遞給兩個函數。

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

請檢查,如果這個工程:

/** 
* 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'); 
} 

與子表:

protected $table = 'inventory_images'; 

protected $primaryKey = 'id'; 

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

我試過你的解決方案,但現在它給了我另一個錯誤 – Mohsin

+0

試圖獲得非對象的屬性 – Mohsin