Как изменить сортировку уведомлений Laravel

Я печатаю уведомления для модели в Laravel 5:

@foreach ($booking->notifications as $notification)                     
        <div class="message">
            <div class="myMessage">
              <p>{{ $notification->data[0])}}</p>
            </div>
        </div>                      
@endforeach

Эти уведомления печатаются в порядке убывания. Можно ли изменить это так, чтобы они печатались в порядке возрастания?

В Laravel documentatio n говорится:

По умолчанию уведомления сортируются по отметке времени created_at.

Стоит упомянуть, что с этой моделью использовалось несколько классов уведомлений, поэтому я не уверен, влияет ли это на поведение сортировки?


person user3574492    schedule 25.06.2017    source источник
comment
Можете ли вы показать, как у вас завязываются отношения?   -  person DevK    schedule 25.06.2017
comment
Да, было бы проще, если бы мы знали, как выглядит код в вашем контроллере.   -  person Derek Pollard    schedule 25.06.2017
comment
Зачем вам нужен контроллер? Это не имеет ничего общего с тем, как уведомления работают в Laravel. Если вы указали use Notifiable; в своей модели, Laravel автоматически связывает модель с любыми записями уведомлений, используя идентификатор модели.   -  person user3574492    schedule 25.06.2017
comment
Вы должны выполнять всю обработку кода и извлечение данных в контроллере, а не в представлении.   -  person Derek Pollard    schedule 25.06.2017
comment
Поскольку вы получаете уведомление как коллекцию, я думаю, что самый простой способ - использовать функции сбора для выполнения каких-либо операций с результатом.   -  person Peyman    schedule 25.06.2017
comment
@Derek Обработка кода не выполняется, это просто управляющий оператор, который перебирает коллекцию и распечатывает данные. Совершенно нормально сохранять логику представления в представлении, если это «логика представления».   -  person user3574492    schedule 25.06.2017
comment
@PeymanSeraj Я не понимаю, вы можете уточнить? Может быть с примером?   -  person user3574492    schedule 25.06.2017
comment
Я рад, что ты нашел ответ.   -  person Peyman    schedule 25.06.2017


Ответы (2)


@ Пейман Серадж привел меня сюда в правильном направлении.

В коллекциях Laravel вы можете использовать методы сбора, поэтому я использовал метод sortBy() на моя коллекция:

@foreach ($booking->notifications->sortBy('created_at') as $notification)

Теперь данные будут распечатаны в возрастающем порядке.

person user3574492    schedule 25.06.2017

Просто отметьте проблему: следуя признаку Notifiable, я обнаружил, что отношение имеет назначенный ему порядок.

Вы можете переопределить его в своей модели:

public function notifications()
{
    return $this->morphMany(\Illuminate\Notifications\DatabaseNotification::class, 'notifiable')->orderByRaw('-read_at','DESC')->orderBy('created_at','DESC');
}

в моем случае я сначала собирал непрочитанные, а затем остальные. Если вы хотите установить сортировку в своем запросе, просто используйте простое отношение:

public function notifications()
{
    return $this->morphMany(\Illuminate\Notifications\DatabaseNotification::class, 'notifiable');
}
person MichałKraków    schedule 01.05.2018