Laravel:如何在一对多关系中同时在父子模型上使用where子句

时间:2018-11-13 10:22:49

标签: laravel relationship

表:组

id name status

表:项目

id group_id name publish

型号:组

public function items()
{
    return $this->hasMany('App\Item');
}

现在,我想获取运行状态的所有组模型,然后发布发布的所有相关项目模型。

我这样做...

$query = Group::where('status', 'running')->items()->where('publish', 'published')->get();

显示以下错误消息。

Call to undefined method Illuminate\Database\Eloquent\Builder::items()

怎么了? 有什么办法吗?

注意此修改:
**How will I get all item models where group model's status is running and item model's publish is published.**

2 个答案:

答案 0 :(得分:0)

在您的情况下,查询应如下所示

$result = Group::whereHas('items', function($query){
              $query->where("publish","published");
          })
          ->where("status", "running")
          ->select('items')
          ->get();

$result将所有带有groups的{​​{1}}作为status,所有具有running状态的'items'都作为publish

答案 1 :(得分:0)

您应该尝试以下操作:

$users = Group::whereHas('items', function($q){
    $q->where('publish', 'published');
})
->where('status', 'running')
->get();