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

新手上路,请多包涵

我的员工表和组表之间存在多对多关系。我已经创建了数据透视表,并且一切正常。但是,我的 employees 表上有一个 sortOrder 列,我用它来确定他们的显示顺序。 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 值的技巧是什么?

原文由 eagle0042 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 528
2 个回答

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

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

原文由 junkystu 发布,翻译遵循 CC BY-SA 4.0 许可协议

只需在字段中添加一个减号并将顺序更改为 DESC。

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

原文由 miller 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏