Je veux exécuter du SQL brut en utilisant Doctrine 2
Je dois tronquer les tables de la base de données et les initialiser avec des données de test par défaut.
Je veux exécuter du SQL brut en utilisant Doctrine 2
Je dois tronquer les tables de la base de données et les initialiser avec des données de test par défaut.
Voici un exemple de requête brute dans Doctrine 2 que je suis en train de faire:
public function getAuthoritativeSportsRecords()
{
$sql = "
SELECT name,
event_type,
sport_type,
level
FROM vnn_sport
";
$stmt = $this->getEntityManager()->getConnection()->prepare($sql);
$stmt->execute();
return $stmt->fetchAll();
}
Accrochez-vous à votre responsable et établissez une nouvelle connexion:
$manager = $this->getDoctrine()->getManager();
$conn = $manager->getConnection();
Créez votre requête et fetchAll:
$result= $conn->query('select foobar from mytable')->fetchAll();
Obtenez les données du résultat comme ceci:
$this->appendStringToFile("first row foobar is: " . $result[0]['foobar']);
J'ai découvert que la réponse est probablement:
NativeQuery vous permet d'exécuter du SQL natif en mappant les résultats en fonction de vos spécifications. Une telle spécification qui décrit comment un ensemble de résultats SQL est mappé à un résultat de Doctrine est représentée par un ResultSetMapping.
Source: SQL natif .
J'ai eu le même problème. Vous souhaitez rechercher l'objet de connexion fourni par le gestionnaire d'entités:
$conn = $em->getConnection();
Vous pouvez alors interroger / exécuter directement contre elle:
$statement = $conn->query('select foo from bar');
$num_rows_effected = $conn->exec('update bar set foo=1');
Consultez la documentation de l'objet de connexion à l' adresse http://www.doctrine-project.org/api/dbal/2.0/doctrine/dbal/connection.html.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.