L'exemple de cet article décrit comment Symfony2 utilise Doctrine pour effectuer des requêtes de base de données. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Variables prédéfinies utilisées dans le texte :
$em = $this->getDoctrine()->getEntityManager(); $repository = $em->getRepository('AcmeStoreBundle:Product')
1. Méthode de base
$repository->find($id); $repository->findAll(); $repository->findOneByName('Foo'); $repository->findAllOrderedByName(); $repository->findOneBy(array('name' => 'foo', 'price' => 19.99)); $repository->findBy(array('name' => 'foo'),array('price' => 'ASC'));
2.DQL
$query = $em->createQuery( 'SELECT p FROM AcmeStoreBundle:Product p WHERE p.price > :price ORDER BY p.price ASC' )->setParameter('price', '19.99′); $products = $query->getResult();
Remarque :
(1) Pour obtenir un résultat, vous pouvez utiliser :
$product = $query->getSingleResult();
Pour utiliser la méthode getSingleResult(), vous devez envelopper avec une instruction try catch, to Il est garanti de renvoyer un seul résultat. L'exemple est le suivant :
->setMaxResults(1); try { $product = $query->getSingleResult(); } catch (\Doctrine\Orm\NoResultException $e) { $product = null; }
La valeur de prix "placeholder" dans l'instruction de requête, au lieu d'écrire la valeur directement dans l'instruction. l'instruction de requête, est utile pour empêcher les attaques par injection SQL. Vous pouvez également définir plusieurs paramètres :
->setParameters(array( 'price' => '19.99′, 'name' => 'Foo', ))
3. Utilisez le générateur de requêtes de Doctrine
<. 🎜>
$query = $repository->createQueryBuilder('p') ->where('p.price > :price') ->setParameter('price', '19.99′) ->orderBy('p.price', 'ASC') ->getQuery(); $products = $query->getResult();