Laravel красноречивый сортировать по последней уникальной записи - PullRequest
0 голосов
/ 23 мая 2018

В настоящее время я создаю базовую папку входящих сообщений для частной системы обмена сообщениями, которая отображает только тех пользователей, с которыми вошел в систему пользователь, с которыми контактировал, если существуют сообщения между пользователем и получателем.(По аналогии с тем, как работает ваш стандартный мессенджер)

Способ, которым я получаю этот список, состоит в том, чтобы проверить таблицу сообщений, чтобы увидеть, существуют ли какие-либо сообщения между двумя пользователями.Если это произойдет, тогда перечислите это в папке «Входящие», но поскольку между пользователем будет много сообщений, я использую коллекцию Laravel и уникальную функцию, чтобы отображать получателя только один раз.Затем пользователь может щелкнуть этого получателя, чтобы просмотреть ветку сообщений.

Проблема, с которой я сталкиваюсь, заключается в возможности отсортировать этот список по последнему сообщению (например, отсортировать по create_at)

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

    $messages = collect(Message::where('recipient_id', $user)->orderBy('created_at', 'desc')->get());

    $messagesUnique = $messages->sortBy('created_at')->unique('sender_id');

    $messagesUnique->values()->all();

Спасибо

1 Ответ

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

Определите ваши отношения:

class Message extends Model
{
    public function sender()
    {
        return $this->belongsTo(User::class, 'sender_id');
    }

    public function recipient()
    {
        return $this->belongsTo(User::class, 'recipient_id');    
    }
}

В модели пользователя:

class User extends Authenticable
{
    public function received()
    {
        return $this->hasMany(Message::class, 'recipient_id')->latest();
    }

    public function sent()
    {
        return $this->hasMany(Message::class, 'sender_id')->latest();
    }
}

Затем для получения сообщений:

$user = Auth::user();
$messages = $user->received->unique('sender_id');
$sent = $user->sent->unique('recipient_id');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...