2017-08-08 15 views
0

私は2つのテーブルInventoriesとInventory_imagesを作成しました。インベントリテーブルのプライマリキーは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とにかく。

1の場合には、それはhasManyする必要がありますが、もっと重要なのは、あなたが、belongsToメソッドを使用して、両方のケースである。1-nの関係では、親モデルがhasMany関係を返す必要がありますし、子モデル(どの外部キーで列を保持する)belongsTo

また、hasManyまたはbelongsToメソッドの2番目の引数は、モデルのスネークケース表現(_idが付加されている)と異なる場合は、外部キー列名です。したがって、inventory_imagesテーブルにinventory_id以外の異なる名前の外部キー列がある場合は、正しい名前で2番目の引数を渡す必要があります。あなたの外部キー名は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

関連する問題