本文实例讲述了Symfony2使用Doctrine进行数据库查询方法。分享给大家供大家参考,具体如下:
预定义文中用到的变量:
1
2
|
$em = $this ->getDoctrine()->getEntityManager(); $repository = $em ->getRepository( 'AcmeStoreBundle:Product' ) |
1、基本方法
1
2
3
4
5
6
|
$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
1
2
3
4
|
$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(); |
注:
(1) 获得一个结果可以用:
1
|
$product = $query ->getSingleResult(); |
运用 getSingleResult()方法你需要是用try catch语句将它包起来,来保证只返回一个结果,例子如下:
1
2
3
4
5
6
|
->setMaxResults(1); try { $product = $query ->getSingleResult(); } catch (\Doctrine\Orm\NoResultException $e ) { $product = null; } |
(2) setParameter('price', '19.99′);运用这个外部方法来设置查询语句中的 “占位符”price 的值,而不是直接将数值写入查询语句中,有利于防止SQL注入攻击,你也可以设置多个参数:
1
2
3
4
|
->setParameters( array ( 'price' => '19.99′, 'name' => 'Foo' , )) |
3、 运用Doctrine的查询生成器
1
2
3
4
5
6
|
$query = $repository ->createQueryBuilder( 'p' ) ->where( 'p.price > :price' ) ->setParameter( 'price' , '19.99′) ->orderBy( 'p.price' , 'ASC' ) ->getQuery(); $products = $query ->getResult(); |
希望本文所述对大家基于Symfony框架的PHP程序设计有所帮助。