我目前有一张餐厅餐桌,里面有餐厅及其分店。请注意,餐馆和分店只有一张桌子。
所以我建立的关系是:
public function branches()
{
return $this->hasMany(self::class);
}
当我修补$restaurant->branches
时,它会返回正确的分支。但是,当我试图加载这样的关系时,如:
$restaurant->with('branches')->get();
当我只寻找父母和分店餐厅的集合时,它将返回存储在表格中的每个餐厅。
如何在父级和分支返回集合的情况下完成此类行为?
答案 0 :(得分:0)
提供foriegn密钥,
public function branches1()
{
return $this->hasMany(self::class, 'foreign_key');
}
然后使用
$restaurants::with('branches1')->get();
答案 1 :(得分:0)
首先,我认为如果您的餐厅表架构如下所示更好
------------------------------
id | name | parent | created_at
------------------------------
然后为分支创建关系
function branches(){
return $this->hasMany(self::class, 'parent');
}
现在您可以访问分支机构,如
foreach($restaurent->branches as $branch){
echo $branch->name;
}
希望有所帮助
答案 2 :(得分:0)
使用with()
将加载所有行。如果您已经提取了模型,则可以使用$restaurant->load('branches');
它将为您加载相关的关系。
其次$restaurant->branches
将返回集合,但是为了急切加载,你必须这样做
Resturant::with('branches')->where('id',$id)->first();
或者您可以使用
Resturant::with(['branches' => function($query) use ($id){
$query->where('id',$id);
})->where('id',$id)->first();