yii能直接输出sql语句吗

yii能直接输出sql语句吗,第1张

yii何输出具体的查询的sql语句

$query = User::find() ->where(['id'=>[1,2,3,4]) ->select(['username'])

// 输出SQL语句

$commandQuery = clone $query

echo $commandQuery->createCommand()->getRawSql() $users = $query->all()

这个有很多种方法

1. yii有提供一个 getRawSql方法  比如说一个查询

$query = User::find()

$query->select(['username','age'])->where(['id'=>1)->one()

echo $query->createCommand()->getRawSql()//输出sql语句

2.可开启yii2的debug模块,这个功能很强大,在里面可以查到当前页面所有的sql信息,具体配置方法自行百度,网上太多这个配置了

3.查找Yii源码   随便找个模型调用原生的方法 比如 User::updateAll 方法,通过编辑器定位到updateAll方法的源码 你会发现下面一段代码

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

   }

   $this->prepare(false)

        $token = $rawSql

        try {

            Yii::beginProfile($token, __METHOD__)

            $this->pdoStatement->execute()

            $n = $this->pdoStatement->rowCount()

            Yii::endProfile($token, __METHOD__)

            $this->refreshTableSchema()

            return $n

        } catch (\Exception $e) {

            Yii::endProfile($token, __METHOD__)

            throw $this->db->getSchema()->convertException($e, $rawSql)

        }

    }

方法里 $rawSql就是最原生要执行的sql拉,在这里打断点输出就ok

个人推荐第二种方法,最方法最高效,具体配置方法自己百度,很简单!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6791750.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存