$em = $this->getDoctrine()->getEntityManager();
$repository = $em->getRepository('AcmeStoreBundle:Product');
$repository->find($id); // 主鍵查單筆
$repository->findAll(); // 全部
$repository->findOneByName('Foo'); // 單一條件
$repository->findAllOrderedByName(); // 自定義方法(需自行實作)
$repository->findOneBy(['name'=>'foo', 'price'=>19.99]);
$repository->findBy(['name'=>'foo'], ['price'=>'ASC']);
$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();
單一結果: 使用 getSingleResult() 需包裝 try-catch 處理 NoResultException:
$query->setMaxResults(1);
try {
$product = $query->getSingleResult();
} catch (\Doctrine\ORM\NoResultException $e) {
$product = null;
}
參數綁定: 使用 setParameter() 或 setParameters() 防止 SQL 注入:
->setParameters(['price' => '19.99', 'name' => 'Foo'])
$query = $repository->createQueryBuilder('p')
->where('p.price > :price')
->setParameter('price', '19.99')
->orderBy('p.price', 'ASC')
->getQuery();
$products = $query->getResult();
QueryBuilder 提供流暢介面,適合動態建構複雜查詢。