本文实例讲述了Symfony查询方法。分享给大家供大家参考,具体如下:
1. createQuery的写法
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$sql = 'SELECT COUNT(DISTINCT(g.goodsId)) FROM AppBundle:GoodsIndex g WHERE g.status = :status' ; $params = array ( 'status' => GoodsIndex::STATUS_NORMAL, ); if (! empty ( $keywords )) { $params [ 'keywords' ] = "%{$keywords}%" ; $sql .= ' AND g.keywords like :keywords ' ; } if (! empty ( $warehouseIdList )) { $params [ 'warehouseIdList' ] = $warehouseIdList ; $sql .= " AND g.warehouseId IN :(warehouseIdList)" ; } $goodsNum = $this ->entityManager->createQuery( $sql )->setParameters( $params )->getSingleScalarResult(); |
个人总结::是指占位符的意思,防止sql注入。所以把所有需要的参数做成数组$params里面。
2. getQuery的写法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
$orderBy = 'p.' . $searchOptions [ 'orderBy' ]; $repository = $this ->entityManager ->getRepository( 'AppBundle:GoodsIndex' ); $query = $repository ->createQueryBuilder( 'p' ); $query ->select( 'DISTINCT(p.goodsId)' ); $query ->where( 'p.keywords like :keywords' ) ->setParameter( 'keywords' , "%{$searchOptions['keywords']}%" ) ->andwhere( 'p.status = :status' ) ->setParameter( 'status' , GoodsIndex::STATUS_NORMAL) ->orderBy( $orderBy , $searchOptions [ 'order' ]) ->setFirstResult( $pagination [ 'pageSize' ] * ( $pagination [ 'page' ] - 1)) ->setMaxResults( $pagination [ 'pageSize' ]); if (! empty ( $searchOptions [ 'warehouseIdList' ])) { $query ->andWhere( $query ->expr()->in( 'p.warehouseId' , $searchOptions [ 'warehouseIdList' ])); } $goodsIndexList = $query ->getQuery()->getResult(); |
希望本文所述对大家基于Symfony2框架的PHP程序设计有所帮助。