Оператор обновления собственного запроса doctrine2 - PullRequest
3 голосов
/ 24 июня 2011

Как выполнить собственный SQL-запрос в Doctrine 2, выполнив оператор обновления?Для метода createNativeQuery в EntityManager требуется второй параметр (ResultSetMapping), чтобы иметь возможность сопоставлять наборы результатов с объектами.

Но при обновлении (или вставке, или установке, или ...) результат не сопоставляется с сопоставлением,Передача пустого значения или просто нового ResultSetMapping () выдает ошибку.

Поддерживаются ли только запросы на выборку для собственного sql?

Ответы [ 2 ]

11 голосов
/ 05 сентября 2011

По существу то же самое с / faken,

это из документов :

Если вы хотите выполнить операторы DELETE, UPDATE или INSERT, API-интерфейс Native SQLне может быть использован и, вероятно, выдает ошибкиИспользуйте EntityManager # getConnection () для доступа к собственному соединению с базой данных и вызовите метод executeUpdate () для этих запросов.

Одно замечание: объект соединения можно получить из EntityManager:

$conn = $entityManager->getConnection();
$rowsAffected = $conn->executeUpdate($sql, $params, $types);
1 голос
/ 25 июня 2011

Операторы обновления обычно довольно просты, поэтому вы также можете использовать обычный способ Doctrine2 (т.е. программно обновлять сущности и вызывать EntityManager :: flush () ИЛИ, используя DQL Updates ).

Сказав это, если вы действительно хотите использовать обычный SQL, вы всегда можете сделать это так:

  1. Сохранить объект соединения db , который вы получаете при создании соединения с Doctrine2:

    $ connection = \ Doctrine \ DBAL \ DriverManager :: getConnection ($ dbConfig-> toArray (), null, $ evm);

  2. Выполните любой SQL-запрос, используя доступные методы в объекте connection , например ::

    $ connection-> executeUpdate ($ sql, $ params, $ types); $ Connection-> Exec ($ SQL); ...

...