Laravel雄辩并使用两个联接表条件进行查询

时间:2019-08-11 07:23:40

标签: laravel eloquent

在这里情况。

我有一个user表,一个role表(不同的用户可以扮演相同的角色)和一个post表(不同的用户可以链接到同一个帖子-多作者发布)。我还有两个联接表,它们链接userrole以及userpost。我已经建立了所有关系(多对多)。

但是现在我尝试获取所有具有特定role(例如'id'= 2)并贡献给特定帖子(例如'id'= 45)的用户。

我可以用一个条件来做到这一点:

$roles = App\Role::where('id', 2)->first();
foreach ($roles->users as $user) {

}

但是我没有找到具有两个条件(role id和post id)的解决方案。

1 个答案:

答案 0 :(得分:3)

您可以使用关系存在来实现您的目标。 whereHas()函数用于检查关系是否存在。

假设您已经在模型上定义了关系

$roleId = 2;
$postId = 45;

$users = User::whereHas('role', function($query) use ($roleId) {
    $query->where('id', $roleId);
})
->whereHas('post', function ($query) use ($postId) {
    $query->where('id', $postId);
})
->get();