如何在 Laravel 中使用 Eloquent 对 NULL 值进行排序

2022-08-30 11:56:49

我的员工和小组表之间有很多很多关系。我已经创建了数据透视表,并且一切都在正常工作。但是,我在员工表上有一个 sortOrder 列,我用它来确定它们的显示顺序。排序顺序列中值为 1 的员工应为第一个,值为 2 应为第二个,依此类推。(如果按降序排序,则向后排序)sortOrder 列是允许空值的整数列。

我已经设置了我的组模型,以按排序列对员工进行排序,但我遇到了一个问题。空值始终首先显示。我尝试过使用ISNULL和类似的SQL方法来代替使用的常规“asc”或“desc”,但我只得到一个错误。

以下是我的组模型中的代码:

class Group extends Eloquent {

public function employees()
    {
        return $this->belongsToMany("Employee")->orderBy('sortOrder', 'asc');
    }
}

以下是我在控制器中用于访问模型的内容:

$board = Group::find(6)->employees;

在Laravel中,最后对NULL值进行排序的诀窍是什么?


答案 1

Laravel没有考虑该方法,但是,您可以将其作为原始查询传入并仍然使用它,因为它比语句更有效,并且如果您超过1000000名员工(接受的答案),结果将保持不变,如下所示:ISNULLIF

public function employees()
{
    return $this->hasMany('Employee')
                ->orderBy(DB::raw('ISNULL(sortOrder), sortOrder'), 'ASC');
}

更新:您也可以使用 orderByRaw() 方法:

public function employees()
{
    return $this->hasMany('Employee')
                ->orderByRaw('ISNULL(sortOrder), sortOrder ASC');
}

答案 2

只需向字段添加减号并将顺序更改为 DESC 即可。

$q->orderBy(\DB::raw('-`sortOrder`'), 'desc');

推荐