如何返回相关的相同模型的集合?

时间:2018-03-26 04:12:10

标签: php laravel relationship

我目前有一张餐厅餐桌,里面有餐厅及其分店。请注意,餐馆和分店只有一张桌子。

所以我建立的关系是:

public function branches()
{
    return $this->hasMany(self::class);
}

当我修补$restaurant->branches时,它会返回正确的分支。但是,当我试图加载这样的关系时,如:

$restaurant->with('branches')->get();

当我只寻找父母和分店餐厅的集合时,它将返回存储在表格中的每个餐厅。

如何在父级和分支返回集合的情况下完成此类行为?

3 个答案:

答案 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();