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



我在我的控制器中执行此操作

$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'));

"type"只是字符串字段

有没有办法在单个查询中做到这一点,然后做一些类似的事情

$C100 = $result['C100']
$C200 = $result['C200']
$C300 = $result['C200']

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

无论如何,您可以在关联的存储库类中编写自己的存储库方法:Junk类的源代码如下所示:

src/Acme/JunkieBundle/Entity/Junk.php

namespace AcmeJunkieBundleEntity;
use DoctrineORMMapping as ORM;
/**
 * @ORMEntity(repositoryClass="AcmeJunkieBundleRepositoryJunkRepository")
 * @ORMTable(name="junk")
 */
class Junkie{ ... }

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

src/Acme/JunkieBundle/Restore/JunkRepository.php

namespace AcmeJunkieBundleRepository;
use DoctrineORMEntityRepository;
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'))

在您的控制器中。

请务必查看条令文档。

您可以只做:

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

;)感谢

相关内容

  • 没有找到相关文章

最新更新