从Doctrine 2中的存储库中选择特定列

时间:2014-12-31 22:25:56

标签: php doctrine-orm doctrine repository-pattern dql

首先,我们知道根据查询中的列数量,可能会增加响应时间。

在Doctrine中调用以下商店,该商店有一个关系,它会带来两个实体的所有列。

public function index()
{
     $this->students = $this->model->getRepository()->findAll();
}

但是考虑一下我之前给出的声明,这个存储库的返回比非关系时更耗时吗?

等问题。我可以选择要返回此存储库的列吗?例如,存储库返回上面的内容:

id (student organization)
name (student organization)
id_class (class entity)

但我想只返回学生的名字。举个例子:

public function index()
{
     $this->students = $this->model->getRepository()->findAll()->onlyColumns("name");
     // Or so to catch more than one column
     $this->students = $this->model->getRepository()->findAll()->onlyColumns("name, dateOfBirth");
}

1 个答案:

答案 0 :(得分:2)

您要使用的是queryBuilder:

http://doctrine-orm.readthedocs.org/en/latest/reference/query-builder.html

当你在存储库上执行 - > findAll()时,它会直接进入数据库并获取所有内容(很快就会说)。要操纵你从数据库中获得的东西,你应该做:

$repo->createQueryBuilder()
->select('column1,column2')
->getQuery()
->getResult();