update symfony2 que getrepository getdoctrine generate force delete createquerybuilder sql symfony1 doctrine

symfony2 - Usando Raw SQL con Doctrine



symfony 4 database config (6)

Cabe señalar que Doctrine2 usa la DOP como base, por lo que recomendaría el uso de declaraciones preparadas en lugar de ejecuciones antiguas.

Ejemplo:

$db = Doctrine_Manager::getInstance()->getCurrentConnection(); $query = $db->prepare("SELECT `someField` FROM `someTable` WHERE `field` = :value"); $query->execute(array(''value'' => ''someValue''));

Tengo algunas consultas extremadamente complejas que debo usar para generar un informe en mi aplicación. Estoy usando Symfony como mi marco y doctrina como mi ORM.

Mi pregunta es la siguiente:

¿Cuál es la mejor manera de pasar las consultas de sql altamente complejas directamente a Doctrine sin convertirlas al lenguaje de consulta de Doctrine? He estado leyendo acerca de la extensión Raw_SQL pero parece que todavía necesitas pasar la consulta en secciones (como from() ). ¿Hay algo para simplemente volcar un montón de comandos de sql en bruto?


Insertar Symfony sin procesar sql usando la doctrina.

Esto en la versión Symfoney 1.3.

$q = Doctrine_Manager::getInstance()->getCurrentConnection(); $result = $q->execute($query);


No estoy seguro de qué quiere decir decir SQL en bruto , pero puede ejecutar consultas SQL tradicionales de esta manera:

... // $this->_displayPortabilityWarning(); $conn = Doctrine_Manager::connection(); $pdo = $conn->execute($sql); $pdo->setFetchMode(Doctrine_Core::FETCH_ASSOC); $result = $pdo->fetchAll(); ...

El siguiente método no es necesario, pero muestra una buena práctica.

protected function _displayPortabilityWarning($engine = ''pgsql'') { $conn = Doctrine_Manager::connection(); $driver = $conn->getDriverName(); if (strtolower($engine) != strtolower($driver)) { trigger_error(''Here we have possible database portability issue. This code was tested on '' . $engine . '' but you are trying to run it on '' . $driver, E_USER_NOTICE); } }


Sí. Puedes obtener un identificador de base de datos desde Doctrine usando el siguiente código:

$pdo = Doctrine_Manager::getInstance()->getCurrentConnection()->getDbh();

y luego ejecute su SQL de la siguiente manera:

$query = "SELECT * FROM table WHERE param1 = :param1 AND param2 = :param2"; $stmt = $pdo->prepare($query); $params = array( "param1" => "value1", "param2" => "value2" ); $stmt->execute($params); $results = $stmt->fetchAll();

Puede usar variables encuadernadas como en el ejemplo anterior.

Tenga en cuenta que Doctrine no hidratará automáticamente sus resultados bien en los objetos de registro, etc., por lo que deberá tratar los resultados que se devuelven como una matriz, que consiste en una matriz por fila devuelta (clave-valor como valor de columna).


También puedes usar Doctrine_RawSql (); para crear consultas de SQL sin procesar que se hidratarán a objetos de doctrina.


$q = Doctrine_Manager::getInstance()->getCurrentConnection(); $result = $q->execute(" -- RAW SQL HERE -- ");

Consulte la documentación de la API de Doctrine para los diferentes métodos de ejecución.