在Doctrine中为findBy自定义SELECT

时间:2016-02-07 02:04:34

标签: symfony doctrine-orm

我打算建立多语种网站。所以我有DB表和列:

  • ID
  • text_en
  • text_pl

从数据库获取数据时,我想只有idtext个字段。通常,我会发出:

SELECT id, text_$locale AS text FROM page ...

如何在Doctrine中执行此操作,以便在使用findBy()findOneBy()时自动完成SELECT? Query Builder是我唯一的选择吗?

2 个答案:

答案 0 :(得分:1)

创建查询是语义选项;你应该将它作为自定义方法放在存储库中。

我在这里发布了一个示例,以便我以后可以使用它作为参考。

快速举例:

<?php

namespace Acme\AppBundle\Entity;
use Doctrine\ORM\EntityRepository;

/**
 * PageRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class PageRepository extends EntityRepository
{

    /**
     * Gets and id and page name based by ID
     * @return array
     */
    public function findNameById($id)
    {
        $query = $this->getEntityManager()
                      ->createQuery("SELECT p.id, p.name
                                     FROM Acme\AppBundle\Entity\Page p
                                     WHERE p.id = :pageId");
        $query->setParameter('pageId', $id);
        $result = $query->getOneOrNullResult();
        return $result;
    }
}

答案 1 :(得分:0)

正确,如果要选择特定列,则必须使用查询构建器或本机查询。

无法使用findBy指定单个列。您可以延迟加载与其他表中的实体的关联,但至少findBy将返回实体表中的所有列。