有没有办法在laravel(8)中orderBy或OrderBy?

Is there a way to orderBy orOrderBy in laravel (8)?

我在 laravel 模型上有一个作用域方法:

public function scopeSort($query, array $params = []) {
    return $query->orderBy('read');
}

我想做的是说:如果没有 read = true 的项目,则 orderByDesc on id。

例如:

public function scopeSort($query, array $params = []) {
    return $query->orderBy('read')->orOrderByDesc('id');

    // Find all with a read of true or, if there is none, order the collection by id in descending order.
}

有这样的东西吗?或者有其他方法可以实现吗?

你可以链接你的排序:

public function scopeSort($query, array $params = []) {
    return $query->orderBy('read')->orderBy('id','desc');
}

示例:

ID      read
1       0
4       0
3       0

你会得到:

ID      read
4       0
3       0
1       0

示例:

ID      read
1       0
4       1
3       1
5       0
6       1

你会得到:

ID      read
5       0
1       0
6       1
4       1
3       1

在all read = 0的情况下,查询会按照ID desc排序。 在有一些read = 1的情况下,查询会先按read排序,再按ID排序。

编辑:准确地说,查询将始终按 'read' 然后 'ID' 排序,但我想你会得到你想要的