在哪里查询?

问题描述 投票:-2回答:1

在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中,但是如果是没有结果/执行的查询呢?

根据正确编程的规则,在没有结果/执行的情况下保持查询的位置?

我将在几个地方使用此查询,包括服务。

php symfony doctrine-orm
1个回答
1
投票

最佳实践是在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'
            );
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.