Eloquent, где пункт не работает, как ожидалось - PullRequest
0 голосов
/ 30 мая 2018

В настоящее время я работаю в частной системе обмена сообщениями в Laravel.

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

У меня проблема в том, что у меня несколько типов сообщений: «Сообщение» и «Задача».В папке «Сообщения» я хочу отображать темы сообщений только с типом «Сообщение».Чтобы сделать это, я использую следующий код в моем контроллере:

    $messageThreads = Thread::where('type', 'Message')
    ->where('sender_id', $user)
    ->orWhere('recipient_id', $user)
    ->get()
    ->sortByDesc('updated_at');

Это, однако, не работает и по-прежнему извлекает потоки сообщений, в которых тип "Задача", а не ограничивается "Сообщение"

Я также попробовал:

     $messageThreads = Thread::where('sender_id', $user)
    ->orWhere('recipient_id', $user)
    ->where('type', 'Message')
    ->get()
    ->sortByDesc('updated_at');

Но это также вернуло тот же результат.

Интересно, если я просто оставлю это как

$messageThreads = Thread::where('type', 'Message')

Он будет получать только сообщения с типом «Сообщение».Только когда я добавляю другие предложения where, он перестает работать должным образом.

1 Ответ

0 голосов
/ 30 мая 2018

Как уже упоминалось, вам, вероятно, нужно сгруппировать предложения where:

Thread::where('type','Message')
->where(function($query)
{
    $query->where('sender_id',$user)
    ->orWhere('recipient_id',$user);
})->get();

Причина в том, что вы ищете Thread where его type, равное Message orWhere егоrecipient_id это $user.Это могут быть сообщения, которые не являются сообщениями типа, но имеют идентификатор пользователя в качестве получателя.

Вот это в документации laravel

https://laravel.com/docs/5.6/queries#parameter-grouping

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