Laravel查询哪里有和哪里

时间:2019-01-05 21:58:12

标签: php laravel

在我的代码中,我应用了多个搜索过滤器。以下是我没有得到预期结果的核心部分。

结果应该是用户具有与其关联的特定帖子,或者没有与之相关的帖子(通过whereHas期望)并且具有特定状态(例如,available_now以下的用户)。

但是下面的查询结果还提供了特定的结果类型,其中用户连接了特定的帖子(预期),但结果包括状态不是available_now(意外)的用户。

我希望查询同时应用这两个条件。我想念什么吗?

$users = User::query();

$users = $this->filter1($users);
$users = $this->filter2($users);

private static function filter1($users) {
    $post_id = 5;

    $users->whereHas('posts', function ($query) use ($post_id) {
        $query->where('id', $post_id);
    })->orDoesntHave('posts');

   return $users;
}

private static function filter2($users) {
    $availability = array('available_now');
    $users->whereIn('availability', $availability); // I'm using whereIn because in some cases the $availability array has multiple values

    return $users;
}

return $users->get();

1 个答案:

答案 0 :(得分:1)

我认为问题来自orDoesntHave。在查询中使用括号以确保您的条件按预期工作:

$users = User::query();

$users = $this->filter1($users);
$users = $this->filter2($users);

private static function filter1($users) {
    $post_id = 5;

    $users->where(function ($query) use ($post_id) { //Will add parenthesis around this part of the query
        $query->whereHas('posts', function ($subquery) use ($post_id) {
            $subquery->where('id', $post_id);
        })->orDoesntHave('posts');
    });

   return $users;
}

private static function filter2($users) {
    $availability = array('available_now');
    $users->whereIn('availability', $availability);

    return $users;
}

return $users->get();
相关问题