Коллекция Laravel, возвращающая дубликат - PullRequest
0 голосов
/ 27 августа 2018

Привет! Я пытаюсь вернуть Расписание пользователей, если оно больше или равно текущей дате, или если это расписание содержит отношение (ScheduledYard), которое не завершено:

$schedules = Auth::user()
        ->schedules()
        ->where('due_at', '>=' , Carbon::now())
        ->orWhereHas('scheduledYards', function ($query) {
            $query->where('completed', false);
        })->get();
    $schedules = $schedules->sortBy('due_at');
    return ScheduleResource::collection($schedules);

Это прекрасно работает,но по какой-то причине он дублирует это для каждого пользователя, к которому он присоединен.т. е. если 3 пользователя имеют это расписание, то оно будет возвращено 3 раза для аутентифицированного пользователя.

Модель пользователя:

public function schedules()
{
    return $this->belongsToMany('App\Models\Schedule');
}

Модель расписания:

public function users() {
    return $this->belongsToMany('App\Models\User');
}

Если яудалите orWhereHas (), он вернет один объект.Что я здесь не так делаю и как я могу вернуть один объект, основываясь на вышеуказанных требованиях?

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

В модели пользователя правильное соотношение должно быть определено как:

public function schedules()
{
    return $this->belongsTo('App\Models\Schedule');
}
0 голосов
/ 27 августа 2018

В модели расписания вам необходимо изменить тип отношения.Я предполагаю, что это один ко многим отношения между пользователями и графикамив этом случае измените users () на user () и body метода, как показано ниже.

public function user() {
   return $this->belongsTo('App\Models\User');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...