$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、
3、如果是查询表相同,只是条件不同的话,可以使用clone;
每次要new一个新Query, Query会保存上次的查询状态