如何在symfony2中将三个Doctrine查询转换为单个查询

时间:2012-08-22 02:56:01

标签: php symfony doctrine-orm

我在控制器中执行此操作

$C100 = $em->getRepository('AcmeJunkieBundle:Junk')->findBy(array('type'=> 'C100'),array('day' => 'ASC'));
$C200 = $em->getRepository('AcmeJunkieBundle:Junk')->findBy(array('type'=> 'C200'),array('day' => 'ASC'));
$C300 = $em->getRepository('AcmeJunkieBundle:Junk')->findBy(array('type'=> 'C300'),array('day' => 'ASC'));

'类型'只是字符串字段

有没有办法在单个查询中执行此操作,然后执行类似

的操作
$C100 = $result['C100']
$C200 = $result['C200']
$C300 = $result['C200']

2 个答案:

答案 0 :(得分:1)

我们需要了解您的Junk实体:type只是一个字符串字段吗?

无论如何,您可以在相关的存储库类中编写自己的存储库方法:您的Junk类源将是这样的,我假设:

<强>的src / Acme公司/ JunkieBundle /实体/ Junk.php

namespace Acme\JunkieBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="Acme\JunkieBundle\Repository\JunkRepository")
 * @ORM\Table(name="junk")
 */

class Junkie{ ... }

确保您有一个带有存储库类名的注释,然后写出该类 - 在控制器中由$C100 = $em->getRepository()方法提取的类。

<强>的src / Acme公司/ JunkieBundle /存储库/ JunkRepository.php

namespace Acme\JunkieBundle\Repository;

use Doctrine\ORM\EntityRepository;

class JunkRepository extends EntityRepository
{

    public function findByTypes(array $types)
    {

        //we build our query here           
        $qb = $this -> createQueryBuilder();

        $query = $qb -> where( $qb -> expr() -> in ('type', $types) )
        -> getQuery();

        return $query -> getResults();

    }


}

现在你可以致电

$em->getRepository('AcmeJunkieBundle:Junk')->findByTypes(array('C100', 'C200', 'C300'))

在您的控制器中。

请务必查看Doctrine文档。

答案 1 :(得分:1)

你可以做到:

$em->getRepository('AcmeJunkieBundle:Junk')
   ->findBy(array('type'=> array('C100', 'C200', 'C300')),array('day' => 'ASC'));

;)谢谢