16

我可以使用以下结构从数据库中获取我的数据:

$user = $this->getDoctrine()
->getRepository('AcmeDemoBundle:Emails')
->find(8081);

当我这样做时,我可以像这样获取我的数据:

$user->getColumnNameHere();

基本上我可以使用实体类。

但是,如果我想使用 QueryBuilder 而不是find我只会得到关联数组。

$product->createQueryBuilder('p')
        ->setMaxResults(1)
        ->where('p.idx = :idx')
        ->select('p.columnNameHere')
        ->setParameter('idx', 8081)
        ->orderBy('p.idx', 'DESC')
        ->getQuery();
        $product = $query->getResult();

$product 作为数组返回。是否可以使用 j Entity Managaer Class 获取它?如果是,如何?

我挖掘了文档,但文档中似乎不可能或不存在,或者我只是瞎了:)

4

4 回答 4

28

是的,您可以,通常使用:

$repository
    ->createQueryBuilder('p')
    ->getQuery()
    ->execute()
;

这应该会返回一个实体数组。

如果要获得单个实体结果,请使用getSingleResultgetOneOrNullResult

$repository
    ->createQueryBuilder('p')
    ->getQuery()
    ->getOneOrNullResult()
;

警告:这些方法可能会抛出NonUniqueResultException.

编辑:好的,所以问题是关于部分对象:http ://docs.doctrine-project.org/en/latest/reference/partial-objects.html

于 2012-05-07T12:31:49.907 回答
19

您可以使用“部分对象”获取对象而不是数组。

这是一个使用 DoctrineORM 2.2.2 测试的示例:

// create query builder
// $em is the EntityManager
$qb    = $em->createQueryBuilder();

// specify the fields to fetch (unselected fields will have a null value)
$qb->select  ('partial p.{id,pubDate,title,summary}')
   ->from    ('Project\Entity\Post', 'p')
   ->where   ('p.isActive = 1')
   ->orderBy ('p.pubDate', 'desc');

$q      = $qb->getQuery();

$result = $q->getResult();
var_dump($result); // => object
于 2012-08-20T20:14:31.633 回答
8

如果您希望从原始查询中返回一个对象:

    $product->createQueryBuilder('p')
    ->setMaxResults(1)
    ->where('p.idx = :idx')
    ->select('p.columnNameHere')
    ->setParameter('idx', 8081)
    ->orderBy('p.idx', 'DESC')
    ->getQuery();
    $product = $query->getResult();

删除此行

->select('p.columnNameHere')

一旦您使用 select,它将返回一个数组...

于 2015-11-07T21:28:02.140 回答
4

getResult()方法返回实体的集合(数组)。getSingleResult()如果您只想获取一个对象,请使用。

编辑:

哦,我刚刚注意到您想获取单个对象的单个字段。getSingleScalarResult()按照@Florian 的建议使用。

于 2012-05-07T12:31:48.840 回答