我有一个表存储,而商店有很多库,在库中我有商店store_id
的外键。
存储表
id(PK)
图书馆表
id(PK)
store_id(FK)
我对hasMany
和belongsTo
参数包含的内容感到困惑,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来自哪个表?与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之类的其他名称,所以我总是想指定哪个是外键和主键
答案 0 :(得分:10)
要简化语法,请将return $this->hasMany('App\Comment', 'foreign_key', 'local_key');
参数视为:
id
列的外表(要链接的表)的列(除非您指定第三个参数,在这种情况下它将使用该列)< / LI>
id
列在您的情况下,因为您在store_id
表格中使用了libraries
,所以您已经让自己的生活变得轻松。在Store
模型中定义时,以下内容应该完美无缺:
public function libraries()
{
return $this->hasMany('App\Library');
}
在幕后,Laravel会自动将id
表的Store
列链接到store_id
表的Library
列。
如果你想明确定义它,那么你会这样做:
public function libraries(){
return $this->hasMany('App\Library', 'store_id','id');
}
$store->libraries() or $library->store()
)。答案 1 :(得分:3)
试试这个。有用。将其添加到您的模型中。
图书馆模型
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->library);
答案 2 :(得分:0)
存储表:
store_id (PK)
图书馆表:
library_id (PK) library_fk_store_id (FK)
店铺模式:
public function libraries()
{
return $this->hasMany(Library::class, 'library_fk_store_id','library_id');
}
库模型:
public function store()
{
return $this->belongsTo(Store::class, 'library_fk_store_id', 'store_id');
}
`library_fk_store_id`
`Store model -> library_id` `Library model -> store_id`
`libraries() -> library_id` `store() -> store_id`