在ArticleController中,我有:
$em = $this->get('doctrine.orm.entity_manager');
$dql = "SELECT a FROM AcmeMainBundle:Article a WHERE a.showing = 1 ORDER BY createdAt DESC";
$query = $em->createQuery($dql);
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$query, /* query NOT result */
$request->query->getInt('page', 1)/*page number*/,
10/*limit per page*/
);
在AdminController中,我有:
$em = $this->get('doctrine.orm.entity_manager');
$dql = "SELECT a FROM AcmeMainBundle:Article a WHERE a.showing = 1 ORDER BY createdAt DESC";
$query = $em->createQuery($dql);
$results = $query->getResults();
所以我有重复:
$em = $this->get('doctrine.orm.entity_manager');
$dql = "SELECT a FROM AcmeMainBundle:Article a WHERE a.showing = 1 ORDER BY createdAt DESC";
$query = $em->createQuery($dql);
数据库的结果应该保存在Repositorium中,但是如果是没有结果/执行的查询呢?
根据正确编程的规则,在没有结果/执行的情况下保持查询的位置?
我将在几个地方使用此查询,包括服务。
最佳实践是在Entity Repository类中存储查询。您可以轻松地在控制器中重复使用它或将其注入您的服务。您可以实现不同的方法来返回结果集,Query对象或任何您需要的方法。
namespace AppBundle\Repository;
use Doctrine\ORM\EntityRepository;
class ProductRepository extends EntityRepository
{
public function getAllOrderedByNameQuery()
{
return $this->getEntityManager()
->createQuery(
'SELECT p FROM AppBundle:Product p ORDER BY p.name ASC'
);
}
}