yii \ db \ Команда не может быть преобразована в строку - Вставить - Yii2 - PullRequest
0 голосов
/ 25 февраля 2020

Я выполняю рефакторинг некоторого кода, который состоит из нескольких запросов на вставку, для этого я конвертирую каждый метод вставки, который выглядит следующим образом:

$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 не может быть преобразован в строку

Это сообщение: сообщение мне не очень помогло.

Я сомневаюсь, что правильный выбор - переписать каждую команду вставки в что-то, что метод транзакции может выполнить, или преобразование непосредственно моей текущей команды вставки в нечто жизнеспособное.

1 Ответ

1 голос
/ 25 февраля 2020

Если вы уже присвоили $codeQuery = Yii::$app->db->createCommand()->insert('code', $codeData), вам не нужно передавать $ codeQuery в другой метод createCommand. Этот метод может читать строку sql как переменную.

Если вы хотите преобразовать команду в строку, выполните преобразование:

$str = $codeQuery->getRawSql(); // get sql statement
$res = $codeQuery->execute(); // execute sql statement
...