我打算建立多语种网站。所以我有DB表和列:
从数据库获取数据时,我想只有id
和text
个字段。通常,我会发出:
SELECT id, text_$locale AS text FROM page ...
如何在Doctrine中执行此操作,以便在使用findBy()
或findOneBy()
时自动完成SELECT? Query Builder是我唯一的选择吗?
答案 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
将返回实体表中的所有列。