Сводная таблица Eloquent Querying для всех пользователей, а также включает записи, где нет пользователей

Я запрашиваю таблицу, которая находит все задачи, назначенные данному пользователю (тот, кто вошел в систему).

У меня есть сводная таблица для отношения задач/пользователей, так как задаче может быть назначено более одного пользователя. Приведенная ниже функция успешно захватывает все задачи, назначенные пользователю. Нет проблем.

Однако я также хочу включить задачи, на которые НЕ назначены пользователи, в функцию ниже (на моей платформе отсутствие пользователей, назначенных задаче, означает, что она предназначена для "всех"). ).

$user_tasks = Team::currentTeam()->tasks()->with('user', 'comments')->whereHas('user', function($query) {
    $query->where('user_id', Auth::user()->id);
})->get();

person Mike Barwick    schedule 18.04.2016    source источник


Ответы (2)


Вероятно, что-то вроде этого должно работать:

$user_tasks = Team::currentTeam()->tasks()->with('user', 'comments')->whereHas('user', function($query) {
    $query->where('user_id', Auth::user()->id);
})->doesntHave('user','or')->get();

потому что нет функции или не имеет. Есть только:

public function doesntHave($relation, $boolean = 'and', Closure $callback = null)
{
    return $this->has($relation, '<', 1, $boolean, $callback);
}

определено, поэтому вам нужно использовать doesntHave и указать оператор в качестве второго аргумента.

person Marcin Nabiałek    schedule 18.04.2016
comment
Спасибо. Что такое «или» и по умолчанию «и» $ boolean? - person Mike Barwick; 19.04.2016
comment
@MikeBarwick Это оператор, который будет использоваться при создании запроса — у вас может быть либо A and B в SQL-запросе, либо A or B - person Marcin Nabiałek; 19.04.2016

Вы можете получить неназначенные задачи отдельно:

$unassigned_tasks = Task::unassigned()->get(); // Uses a scope that says where user_id is null

А потом что-то вроде:

$user_tasks->tasks->push($unassigned_tasks);
person tptcat    schedule 18.04.2016