【问题标题】:How do you change the sorting of Laravel Notifications你如何改变 Laravel 通知的排序
【发布时间】:2017-11-28 05:57:54
【问题描述】:

我正在打印 Laravel 5 中模型的通知:

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

这些通知是按降序打印的,有什么办法可以改变它,使它们按升序打印?

Laravel documentation 声明:

默认情况下,通知会按照 created_at 时间戳排序

值得一提的是,该模型使用了多个通知类,所以我不确定这是否会影响排序行为?

【问题讨论】:

  • 你能说明你是如何建立关系的吗?
  • 是的,如果我们知道你的控制器中的代码是什么样子会更容易。
  • 为什么要查看控制器?它与通知在 Laravel 中的工作方式无关。如果你在模型中指定了use Notifiable;,那么 Laravel 会自动使用 model->id 将模型与任何通知记录关联起来
  • 您应该在控制器中进行所有代码处理和数据检索,而不是视图。
  • 由于您是作为集合接收通知,我认为最干净的方法是使用集合函数对结果进行任何操作。

标签: php laravel laravel-5 laravel-notification


【解决方案1】:

@Peyman Seraj 将我引向了正确的方向。

有了 Laravel 集合,你可以使用集合方法,所以我在我的集​​合中使用了 sortBy() 方法:

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

现在按升序打印数据。

【讨论】:

    【解决方案2】:

    只是解决这个问题: 通过遵循 Notifiable trait,我发现该关系具有分配给它的顺序。

    您可以在模型中覆盖它:

    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');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      相关资源
      最近更新 更多