0

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

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

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

例如:

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.
}

这样的事情存在吗?还是有其他方法可以实现这一目标?

4

1 回答 1

1

你可以链接你的排序:

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。

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

于 2020-09-21T23:08:04.860 回答