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 и да посочите оператор като 2-ри аргумент.

person Marcin Nabiałek    schedule 18.04.2016
comment
Благодаря. Какво е 'or' и 'и' по подразбиране $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