我正在重构包含多个插入查询的某些代码,为此,我正在转换每个看起来像这样的插入方法:
$code = Yii::$app->db->createCommand()
->insert('code', $codeData
)->execute();
至此:
$codeQuery = Yii::$app->db->createCommand()
->insert('code', $codeData);
return $codeQuery;
并且在另一个执行事务的方法中:
$transaction = Yii::$app->db->beginTransaction();
try{
Yii::$app->db->createCommand($codeQuery)->execute();
$transaction->commit();
} catch (\Exception $e) {
$transaction->rollBack();
throw $e;
} catch (\Throwable $e) {
$transaction->rollBack();
throw $e;
}
但是我得到了错误:
类yii \ db \ Command的对象无法转换为字符串
这篇文章:post并没有真正帮助我。
我怀疑正确的选择是将每个插入命令重写为事务处理方法可以执行的操作,还是将我当前的插入命令输出直接转换为可行的操作。
如果已经分配了$codeQuery = Yii::$app->db->createCommand()->insert('code', $codeData)
,则不需要将$ codeQuery传递到另一个createCommand方法中。此方法可以读取sql的字符串作为变量。