yii何输出具体的查询的sql语句:
$query = User::find() ->where(['id'=>[1,2,3,4]) ->select(['username'])// 输出SQL语句
$commandQuery = clone $queryecho $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
个人推荐第二种方法,最方法最高效,具体配置方法自己百度,很简单!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)