Pour l'instant, j'ai réussi à créer une fonction qui récupère des données de la base de données à l'aide de la fonction createQueryBuilder de Doctrine.
Est-ce que quelqu'un sait s'il existe une fonction similaire pour insérer ou mettre à jour la base de données? Ou comment puis-je utiliser createQueryBuilder?
Doctrine 2 ORM ne prend pas en charge INSERT
via DQL ou le générateur de requêtes DQL . Pour une syntaxe complète, vérifiez le fichier EBNF de DQL .
Pour gérer les insertions dans ORM, vous devez toujours instancier manuellement une entité et la conserver avec le gestionnaire d'entités:
$user = new \My\Entity\User();
$entityManager->persist($user);
$entityManager->flush();
Vous ne pouvez gérer que SELECT
, UPDATE
et DELETE
via DQL dans Doctrine ORM:
Sélectionner:
SELECT u FROM My\Entity\User u WHERE u.id = :userId
Mettre à jour:
UPDATE My\Entity\User u SET u.status = 'banned' WHERE u.id = :userId
Effacer
DELETE My\Entity\User u WHERE u.id = :userId
Vous pouvez également gérer ces opérations avec QueryBuilder:
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('u')
->from('My\Entity\User', 'u')
->where($queryBuilder->expr()->eq('u.id', ':userId'));
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->delete('My\Entity\User', 'u')
->where($queryBuilder->expr()->eq('u.id', ':userId'));
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->update('My\Entity\User', 'u')
->set('u.status', 'banned')
->where($queryBuilder->expr()->eq('u.id', ':userId'));
Une autre option que vous avez à la place en utilisant un générateur de requêtes est d'utiliser les fonctions de préparation et d'exécution de Doctrine DBAL. N’est probablement pas aussi flexible que QueryBuilder, mais il pourrait être utile d’insérer des INSERT dans certaines situations.
La méthode à utiliser consiste à obtenir la connexion à la base de données à partir d’Entity Manager.
$sql = "INSERT INTO table (field1, field2) VALUES ('foo', 'var')";
$stmt = $em->getConnection()->prepare($sql);
$stmt->bindValue(':invoice', $invoiceId);
$result = $stmt->execute();
Si vous utilisez DBAL queryBuilder, il est possible d'insérer.
$qb = $connection->createQueryBuilder();
Pour insérer avec le queryBuilder c'est comme ça:
$qb->insert('MuBundle:MyClass', 'momc')
->values (array(
'property1 (id for example)' => '?'
'property2 (name for exmaple)' => '?'
))
->setParameter(0, $id)
->setparameter(1, $name)
utiliser QueryBuilder pour insérer des données n'est pas possible sauf si vous êtes prêt à écrire DQL ou SQL. Si vous cherchez un moyen d'insérer simplement des données dans votre table de base de données, vous devez tout d'abord vous assurer que les données sont chargées dans une classe Entity pour la table dans laquelle vous souhaitez insérer vos données. Par exemple, $em->persist($entity);