Laravel имеет функцию где - PullRequest
       3

Laravel имеет функцию где

0 голосов
/ 04 июня 2018

В настоящее время я использую эту функцию, чтобы собрать всех моих пользователей с отношением

    $users = users::with(array('statusCurrent' => function($query)
    {
        $query->where('status.status', 'in');
        $query->orderBy('status.date', 'DESC');
    }));
    $users = $users->get();

Это возвращает обоих моих пользователей, и если status = 'in', то это возвращает отношение также, но если status = 'out' он по-прежнему возвращает строку, но с status_current = null.

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

Iпопытался $candidates = $candidates->has('statusCurrent')->get(); попытаться получить результаты только в том случае, если отношение не равно нулю, но оно по-прежнему возвращает пользователей, если отношение StatusCurrent равно нулю.

Как мне сделать это так, чтобы каждый пользователь мог, если что-тоаргументы, которые я передаю в with(array('statusCurrent' => function(){}), не соответствуют действительности, они полностью игнорируются?

РЕДАКТИРОВАТЬ

Пользователи Модель

public function statusCurrent(){
    return $this->hasOne('App\Status', 'user_id', 'id')->orderBy('date', 'desc')->limit(1);
}

Пользователь можетиметь много статусов », но отношение StatusCurrent предназначено для возврата их 1 самого последнего статуса на основе status.date

1 Ответ

0 голосов
/ 04 июня 2018

Вам нужно whereHas, чтобы отфильтровать пользователей по их отношениям

$users = users::with(array('statusCurrent' => function($query)
    {  
        $query->orderBy('status.date', 'DESC');
    }))
    ->whereHas('statusCurrent', function ($query) {
        $query->where('status', 'in');
    })
    ->get();

См. Запрос наличия отношений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...