Symfony Doctrine查询生成器。如何在没有连接的情况下选择多对一字段的值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Symfony Doctrine查询生成器。如何在没有连接的情况下选择多对一字段的值?相关的知识,希望对你有一定的参考价值。

我有两个实体:

 class Products
 {
    /**
     * @ORMColumn(name="id", type="integer", nullable=false)
     * @ORMId
     */
    private $id;

     /**
      * @ORMColumn(name="name", type="string", length=255, nullable=true)
      */
     private $name;

     /**
      * @var CatalogSections|null $catalogSection
      * @ORMManyToOne(targetEntity="AppEntityCatalogSections")
      * @ORMJoinColumn(name="catalog_section", referencedColumnName="id")
      */
     private $catalogSection; 

     ...
}

和目录部分

class CatalogSections
{
    /**
     * @ORMColumn(name="id", type="integer", nullable=false)
     * @ORMId
     * @ORMGeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @ORMColumn(name="name", type="string", length=250, nullable=true)
     */
    private $name;

    ...
}

我想通过Doctrine Query Builder获取产品的catalog_section ID。有没有办法在没有加入的情况下获得它? I.E.我想获得一个存储在products表中的catalog_section列值

$qb = $this->createQueryBuilder('products');

$qb->select('products.id', 'products.name',
    'products.catalogSection' // catalog_section 
);
答案

在没有加入的情况下选择ID的唯一正当理由是获得性能。

当涉及性能时,最好直接使用DBAL Connection而不是查询构建器。

$this->entityManager->getConnection()->executeQuery('SELECT id, name, catalog_section FROM products')

以上是关于Symfony Doctrine查询生成器。如何在没有连接的情况下选择多对一字段的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Doctrine 在 Symfony2 中实现子查询?

如何让 Doctrine 在 Symfony2 中记录查询

如何使用 Symfony ACL 过滤我的 Doctrine 查询

Symfony2 & Doctrine:创建自定义 SQL 查询

Symfony & Doctrine InnerJoin

如何使用Symfony3在Doctrine2 Entity中运行查询查询