我有一个表商店,商店有很多库,在库我有商店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
列的外表(要链接的表)的列(除非您指定第三个参数,在这种情况下它将使用它)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()
)。试试这个吧。有用。将其添加到您的模型中。
图书馆模型
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);