テーブルストアがあり、ストアには多くのライブラリがあり、ライブラリにはストアstore_id
。
店舗テーブル
id(PK)
図書館テーブル
id(PK)
store_id(FK)
私はhasMany
およびbelongsTo
パラメーターが含まれていると混同しています。 docs
return $ this-> hasMany( 'App\Comment'、 'foreign_key');
return $ this-> hasMany( 'App\Comment'、 'foreign_key'、 'local_key');
return $ this-> belongsTo( 'App\Post'、 'foreign_key'、 'other_key');
HasMany foreign_keyとlocal_keyのどのテーブルからのものですか? belongsToと同じで、foreign_keyとother_keyのテーブルはどこから来ましたか?
店舗モデル
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');
}
テーブルの主キーIDをsidなどの他の名前に変更することがあるため、常に外部キーと主キーを指定する必要があるため
構文を単純化するために、return $this->hasMany('App\Comment', 'foreign_key', 'local_key');
パラメーターを次のように考えてください。
id
列にリンクする外部テーブル(リンクしているテーブル)の列(3番目のパラメーターを指定している場合を除き、その場合はそれを使用します)id
列にリンクさせたくない場合あなたの状況では、libraries
テーブルでstore_id
を使用しているので、あなたは自分の人生を楽にしました。 Store
モデルで定義されている場合、以下は完全に機能するはずです。
public function libraries()
{
return $this->hasMany('App\Library');
}
舞台裏では、Laravel=は自動的にid
テーブルのStore
列をLibrary
のstore_id
列にリンクします表。
明示的に定義する場合は、次のようにします。
public function libraries(){
return $this->hasMany('App\Library', 'store_id','id');
}
$store->libraries() or $library->store()
)。これを試してください。できます。これをモデルに追加します。
ライブラリモデル
_public function store()
{
return $this->belongsTo(Store::class, 'store_id', 'id');
}
_
モデルの保存
_ public function libraries()
{
return $this->hasMany(Library::class);
}
_
サンプルコード
_ $store = Store::find(1);
dd($store->libraries);
_
この場合、ストアには多くのライブラリがあるため、Store
モデルにはlibraries()
関数があります。この標準の詳細については、 James 'answer の最後の行を参照してください。