文章置顶排序错了,麻烦大佬来帮忙下,谢谢 [ 2.0 版本 ]
date 是时间 a是要置顶的条件
蛋蛋的蛋 补充于 2018-08-04 10:50
谢谢大佬的用心解答。
最佳答案
-
orderBy() 用错了。
public function orderBy($columns) { // 注意这里是直接赋值 $this->orderBy = $this->normalizeOrderBy($columns); return $this; }
https://github.com/yiisoft/yii2/blob/master/framework/db/QueryTrait.php#L323
从上面的代码可以看出, orderBy() 不能像 andWhere() 那样使用链式操作,你的写法会导致第一个 orderBy() 被覆盖。正确的写法:
->orderBy([ 'FIND_IN_SET(`a`, `attr`)' => SORT_DESC, // SORT_DESC 是 PHP 内置常量 'date' => SORT_DESC, ])
Tip:如果查询语句返回的结果与自己期望的不相符,可以借助
yii\db\Command
的rawSql
属性返回原生的 SQL 语句,通过 SQL 语句判断构建的 ActiveQuery 是否有问题。拿你遇到的这个问题来说,当你发现文章的排序有问题后,首先可以做的就是使用:echo Article::find() ->select(...) ->where((...)) ->orderBy((...)) ->orderBy((...)) ->createCommand()->rawSql;
返回 SQL 语句,看看构建的语句是否存在问题。一看 SQL 中 order by 从句是
order by date DESC
, 就会立刻意识到问题出在 orderBy() 那里了。
蛋蛋的蛋
注册时间:2018-04-02
最后登录:2024-03-11
在线时长:34小时29分
最后登录:2024-03-11
在线时长:34小时29分
- 粉丝4
- 金钱64
- 威望20
- 积分604