2017-10-20 11 views
1

私はテーブルストアを持っており、ライブラリにはライブラリがたくさんあります。ライブラリにはstore_idという外部キーがあります。Laravel hasManyおよびbelongsToパラメータ

ストアテーブル

id(PK) 

ライブラリテーブル

id(PK) 
store_id(FK) 

私は、hasManybelongsToパラメータで混乱している、docsでは

リターンの$ this - > hasManyの言います( 'App \ Comment'、 'foreign_key');

返す$ this-> hasMany( 'App \ Comment'、 'foreign_key'、 'local_key');

返す$ this-> belongsTo( 'App \ Post'、 'foreign_key'、 'other_key');

hasMany foreign_keyとlocal_keyのテーブルはどれですか? foreign_keyとother_keyのテーブルが由来するbelongsToと同じですか?

ストアモデル

public function library(){ 
    return $this->hasMany('App\Library', 'what_foreign_key_should_be_here','what_other_key_should_be_here'); 
} 

ライブラリモデル

public function stores(){ 
    return $this->belongsTo('App\Stores', 'what_foreign_key_should_be_here', 'what_other_key_should_be_here'); 
} 

時々私は、SIDのような他の名前にテーブルの私の主キーIDを変更するので、私は常に外部キーであるかを特定したいのでと主キー

答えて

4

構文を簡略化するため、return $this->hasMany('App\Comment', 'foreign_key', 'local_key');のパラメータを次のように考えてください。

  1. あなたは三番目のパラメータを指定している場合を除きれる、(現在のテーブルのid列にバックリンクあなたが
  2. 外部テーブル(あなたがにリンクされているテーブル)の列にリンクしたいモデル場合、それは
  3. )は使用すべきである現在のテーブルの列を使用します - つまり、あなたが他のテーブルの外部キーが

現在のテーブルのid列にリンクしたくない場合あなたの状況では、libraries tablにstore_idを使用しているためe、あなたは自分の人生を楽にしました。舞台裏

public function libraries() 
{ 
    return $this->hasMany('App\Library'); 
} 

、Laravelは自動的Libraryテーブルのstore_id列にStoreテーブルのid列をリンクします。下記のおStoreモデルで定義されたときに完璧に動作するはずです。

明示的に定義したい場合は、次のように、そしてあなたがそれを行うだろう:

public function libraries(){ 
    return $this->hasMany('App\Library', 'store_id','id'); 
} 
  • モデルの標準は、複数の機能は、(hasManyのを返しながら、単独で名前の関数は、belongsToのを返すということですがすなわち$store->libraries() or $library->store())。
1

これを試してみてください。できます。これをモデルに追加します。

ライブラリモデル

public function store() 
    { 
     return $this->belongsTo(Store::class, 'store_id', 'id'); 
    } 

ストアモデル

public function library() 
    { 
     return $this->hasMany(Library::class); 
    } 

サンプルコード。

$store = Store::find(1); 
dd($store->libray); 
関連する問題