2015-03-31 17:59:22 114221次浏览 6条回答 9 悬赏 10 金钱

请问如何输出连贯操作的sql语句?
比如 find()->all()使用的什么sql语句?

最佳答案

  • 发布于 2015-03-31 22:37 举报

    如果你是想打印本次的Sql的话,可以用 $model->find()->createCommand()->getRawSql();

    4 条回复
    回复于 2015-10-30 13:48 回复

    这个是不能用的 报错

    回复于 2016-01-29 15:29 回复

    不是不能用,是你的用法有误。不能带 all(). find() 返回值类型是 yii\db\ActiveQuery, find()->all() 返回的就是数组了。

    回复于 2016-09-22 19:17 回复
    $cou = $coupon->save();
    $a = $coupon->find()->createCommand()->getRawSql();
    var_dump($a);die();
    

    这样打印的信息是 select * from 。。。 但是我是执行的save操作,去掉find还会报错怎么解决呢

    回复于 2016-12-12 16:39 回复

    你这个问题解决了吗?

    觉得很赞
  • 回答于 2015-03-31 21:07 举报

    可以在网页底部的debugger看到,点击log可以看到你执行的sql语言(也就是连贯操作的sql语句);
    比如在controller里面你执行 $query= ReleaseForm::find()->where(['type'=>1])->all();
    注:源代码是这些:

    $query=  ReleaseForm::find()->where(['type'=>1]);
    $pagination = new Pagination([
        'defaultPageSize' => 5,
        'totalCount' => $query->count(),
    ]);
            
    $property_data= $query
        ->offset($pagination->offset)
        ->limit($pagination->limit)
        ->all();
    

    在网页里你点击底部的log就可以看到:

    10	21:01:36.667	info	yii\db\Command::query	SELECT COUNT(*) FROM `releases` WHERE `type`=1
    E:\web\Apache24\htdocs\basic\controllers\PropertyController.php (14)
    11	21:01:36.667	info	yii\db\Connection::open	Opening DB connection: mysql:host=localhost;dbname=xunwu
    E:\web\Apache24\htdocs\basic\controllers\PropertyController.php (14)
    12	21:01:36.669	info	yii\db\Command::query	SELECT * FROM `releases` WHERE `type`=1 LIMIT 5
    E:\web\Apache24\htdocs\basic\controllers\PropertyController.php (20)
    13	21:01:36.670	info	yii\db\Command::query	SHOW FULL COLUMNS FROM `releases`
    E:\web\Apache24\htdocs\basic\controllers\PropertyController.php (20)
    14	21:01:36.674	info	yii\db\Command::query	SHOW CREATE TABLE `releases`
    

    这样就知道你执行了什么sql语句了

    4 条回复
    回复于 2015-04-01 10:47 回复

    在网页里你点击底部的log? 哪里点击。。。没有看到啊

    回复于 2015-04-02 11:22 回复

    要开启debug模式

    回复于 2015-04-02 11:29 回复

    开了debug,没看到啊

    回复于 2015-04-02 15:40 回复

    yii2.0开启了debug后,在页面底部大概中间位置有log,比较小你看看有没有

  • 回答于 2015-07-29 15:51 举报

    开启dev debug,然后URL:
    http://yourDomain/debug

    觉得很赞
  • 回答于 2016-12-22 14:50 举报

    echo $query->createCommand()->sql;

    1 条回复
    回复于 2017-11-20 14:07 回复

    不行.....

    觉得很赞
  • 回答于 2017-09-20 16:50 举报

    真 tm 难用

    , 觉得很赞
  • 回答于 2017-09-22 15:52 举报

    也可以不用getSql();
    在updateAll这个方法上点进去:

    OrderMain::updateAll($update_value, $update_where);
    

    转到这段代码:

    public static function updateAll($attributes, $condition = '', $params = [])
        {
            $command = static::getDb()->createCommand();
            $command->update(static::tableName(), $attributes, $condition, $params);
    
            return $command->execute();
        }
    

    再点击execute()方法进去,转到

     public function execute()
        {
            $sql = $this->getSql();
    
            $rawSql = $this->getRawSql();
    
            Yii::info($rawSql, __METHOD__);
    
            if ($sql == '') {
                return 0;
            }
    

    然后在这一行打个断点: $rawSql = $this->getRawSql();
    这里的$rawSql 就是原生sql;
    这个对于增删改查都是实用的,还是要从原理出发哦

    1 条回复
    回复于 2017-09-22 15:55 回复

    不过个人还是用的是上面有个coder的方法
    开启dev debug,然后URL:
    http://yourDomain/debug

    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
myname9
总监

myname9

注册时间:2014-10-15
最后登录:2015-05-06
在线时长:43小时31分
  • 粉丝2
  • 金钱1936
  • 威望0
  • 积分2366

热门问题