搜索具有相应类别symfony2的产品?

时间:2016-01-06 17:12:43

标签: php mysql sql symfony doctrine-orm

我必须进行查询才能找到我所有的产品目录,然后以这种方式在我的视图中列出它们:

    category:
             product
             product
             product
             .......

    category:
             product
             product
             porduct
             .......
etc

我做这个咨询,但是,因为我无法按顺序显示它们,因为咨询只给我带来了产品,我想按类别对它们进行排序。

public function findOneByIdJoinedToCategory($id)
{
    $query = $this->getEntityManager()
        ->createQuery(
            'SELECT p, c FROM AcmeStoreBundle:Product p
            JOIN p.category c
            WHERE p.id = :id'
        )->setParameter('id', $id);

    try {
        return $query->getSingleResult();
    } catch (\Doctrine\ORM\NoResultException $e) {
        return null;
    }
}

我该怎么办? 我认为像咨询一样,按类别将产品组带给我,然后进行切割控制。 但不是怎么做。

感谢。

2 个答案:

答案 0 :(得分:0)

您的方法名称为findOneByIdJoinedToCategory,这对我意味着您只会选择一种产品,那么为什么如果它只是一种产品,您需要对它们进行排序?或者,您应该重命名此方法。

如果您尝试选择按类别分组或排序的所有产品,您可以撤消DQL以选择类别并对其进行排序,然后您可以使用getter获取每个类别的产品:

$query = $this->getEntityManager()
    ->createQuery(
        'SELECT c FROM AcmeStoreBundle:Category c ORDER BY c.name ASC'
    );

然后,对于每个类别,您都可以获得他们的产品:

$category->getProducts();

如果此解决方案无法满足您的需求,您可以继续使用您的方法,但需要将DQL更改为:

$query = $em->createQuery('SELECT p FROM Product p JOIN p.category c ORDER BY c.name ASC');

或者如果你想使用group by子句,它将如下所示:

$em->createQuery('SELECT u FROM Product p JOIN p.category c GROUP BY c.name');

答案 1 :(得分:0)

您可以尝试:

use \Doctrine\ORM\Query\Expr\Join;

$em = $this->getContainer()->get('doctrine.orm.entity_manager');
$result = $em
    ->createQueryBuilder()
    ->select('c.name AS category, p.name AS product')
    ->from('AppBundle:Product', 'p')
    ->leftJoin('AppBundle:Category', 'c', Join::WITH, 'p.category = c.id')
    ->orderBy('category', 'DESC')
    ->addOrderBy('product', 'DESC')
    ->getQuery()
    ->getArrayResult()
;

结果你会得到类似的东西:

array (
  0 => 
  array (
    'category' => 'c1',
    'product' => 'p1',
  ),
  1 => 
  array (
    'category' => 'c2',
    'product' => 'p2',
  ),
  // ...
)

希望这完全是你的愿望。