\yii\db\Query() 会携带上次查询的order,limit,offset? [ 2.0 版本 ]
$database = new \yii\db\Query();
$sql1 = $database->select([])->from('aa')->Where(['is_del'=>0])->offset(10)->limit(10)->orderby('id desc')->createCommand()->getRawSql();
$sql2 = $database->select([])->Where(['isdel'=>0])->from('bb')->createCommand()->getRawSql();
输出sql:
sql1:"SELECT * FROM `aa` WHERE `is_del`=0 ORDER BY `id` DESC LIMIT 10 OFFSET 10"
sql2:"SELECT * FROM `bb` WHERE `isdel`=0 ORDER BY `id` DESC LIMIT 10 OFFSET 10"
输出的sql2
为什么会带着sql1
的order
,limit
,offset
?
除了重新new一个对象之外,有什么其他解决办法吗?
这很奇怪啊,总不能每次查询都新new一个吧。
最佳答案
-
1、new \yii\db\Query() 是一个对象,设置order,limit,offset是设置了对象的三个属性,下次再使用这个对象时,属性已经设置;
2、
$sql1 = (new \yii\db\Query())->select([])->from('aa')->Where(['is_del'=>0])->offset(10)->limit(10)->orderby('id desc')->all(); $sql2 = (new \yii\db\Query())->select([])->from('bb')->Where(['isdel'=>0])->all();
3、如果是查询表相同,只是条件不同的话,可以使用clone;
共 3 条回复
kisska00
注册时间:2015-03-10
最后登录:2018-06-07
在线时长:8小时29分
最后登录:2018-06-07
在线时长:8小时29分
- 粉丝0
- 金钱120
- 威望0
- 积分200