2016-07-29 17:26:17 12002次浏览 2条回答 2 悬赏 10 金钱
$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为什么会带着sql1orderlimitoffset
除了重新new一个对象之外,有什么其他解决办法吗?
这很奇怪啊,总不能每次查询都新new一个吧。

最佳答案

  • njsjwf 发布于 2016-07-29 17:37 举报

    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 条回复
    回复于 2016-07-29 17:57 回复

    说的很有道理

    回复于 2016-07-29 18:13 回复

    说的很有道理

    回复于 2016-07-29 18:16 回复

    查询同库不同表。有没有什么配置能够让这几个属性每次使用的时候清除掉?

您需要登录后才可以回答。登录 | 立即注册
kisska00
见习主管

kisska00

注册时间:2015-03-10
最后登录:2018-06-07
在线时长:8小时29分
  • 粉丝0
  • 金钱120
  • 威望0
  • 积分200

热门问题