使用2个排序依据的Laravel数据库通知

jq6vz3qz  于 2023-01-03  发布在  其他
关注(0)|答案(2)|浏览(128)

嗨,我想问一下我的代码中有2个orderBy的通知,但它就是不工作,看起来它的2个顺序有冲突,有什么解决办法吗?
我想显示通知,例如,第一个未读通知,第二个已读通知,按最新created_at排序

<?php

    namespace Illuminate\Notifications;
    
    trait HasDatabaseNotifications
    {
        /**
         * Get the entity's notifications.
         *
         * @return \Illuminate\Database\Eloquent\Relations\MorphMany
         */
        public function notifications()
        {
            return $this->morphMany(DatabaseNotification::class, 'notifiable')
            ->orderBy('read_at', 'asc')  //order by unread , unread display first 
            ->orderBy('created_at', 'desc')  //latest record display first based on created_at
            ;
        }

默认情况下,laravel顺序通知基于created_at desc,因此我添加了orderBy('read_at', 'asc'),此命令将首先排序未读通知,但已读通知不是->orderBy('created_at', 'desc'),因此每当我将其放在第一位时,它将在上面的示例中执行未读通知将显示在第一位,如果我将其放在第二位,则不工作

->orderBy('created_at', 'desc') 
->orderBy('read_at', 'asc')

未读通知顺序是不工作,但->orderBy('created_at', 'desc')这工程。有任何其他周转这一点?我想第一次由未读第二次由最新的顺序阅读谢谢
如何检索内部控制器

$notifications = $user->notifications ;

我试着收集,但失败了

rwqw0loc

rwqw0loc1#

正如您所指出的,Laravel在notifications关系中应用了一个order by子句,该子句来自Illuminate\Notifications\HasDatabaseNotifications。但是您可以根据需要改写和调整。例如:
在用户模型中:

class User extends Model
{
    // ...
    /**
     * Get the entity's notifications.
     *
     * @return \Illuminate\Database\Eloquent\Relations\MorphMany
     */
    public function notifications()
    {
        return $this->morphMany(DatabaseNotification::class, 'notifiable')
            ->orderByRaw("case when read_at IS NULL then 0 else 1 end")
            ->orderBy('created_at', 'desc');
    }
}
j91ykkif

j91ykkif2#

您可以使用reorder()删除任何已设置的orderBy:
reorder方法允许您删除所有现有订单,并可以选择应用新订单。

$user->reorder()->orderBy('read_at', 'asc')->orderBy('created_at', 'desc')->get();

相关问题