2016-11-02 2 views
0

Создание приложения чата с помощью панели мониторинга и попытка получить уведомление о последнем сообщении, отправленном другим пользователем.GroupBy and OrderBy Laravel Eloquent

Вот моя модель отношения:

public function messages() { 
    return $this->hasMany('App\Message', 'author_id'); 
} 

public function lastMessage() { 
    return $this->hasMany('App\Message', 'recipient_id')->orderBy('created_at', 'DESC')->groupBy('author_id'); 
} 

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

Посмотрел онлайн, но не мог найти информацию об этом. Единственное, что я нашел, это сообщение того, кто сказал, что orderBy и groupBy в laravel не играют хорошо вместе.

Любая помощь приветствуется!

ответ

0

Вместо того чтобы пересмотреть отношения в lastMessage, вы можете попробовать позвонить messages, а затем выполнить запрос из этого.

Не видя больше вашей модели схемы (то есть: где определены эти отношения ??), это не может быть идеальным, но это начало:

public function lastMessage() 
{ 
    return $this->messages() // <-- Notice the()...this creates a query instead of immediately returning the relationship 
     ->where('recipient_id', $this->id) // Not sure if this is correct, might need to adjust according to how you have defined the tables 
     ->orderBy('created_at', 'desc') 
     ->first(); 
} 

Он будет запрашивать messages отношения с цепью которые перечислены. И возвращая first(), он возвращает только одну запись, а не коллекцию.

+0

Я буду играть с вашими предложениями сегодня вечером, чтобы узнать, могу ли я что-то понять. Дело в том, что я не ищу, чтобы получить 1 сообщение, я ищу, чтобы получить последнее новое сообщение для каждой активной беседы, чтобы вставлять уведомления. Поэтому, если 3 пользователя обменяли меня сообщениями, которые у меня были с ними, я хочу, чтобы эти сообщения отображались как «новые уведомления», похожие на facebook. Я надеюсь, что в этом есть смысл. Вот почему я использую groupBy() – max234435