如何在学说 2 中获取类而不是数组

2022-08-31 00:01:05

我能够通过使用以下结构从数据库获取数据:

$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获取它?如果是,如何?

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


答案 1

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

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

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

如果要获取单个实体结果,请使用 或 :getSingleResultgetOneOrNullResult

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

警告:这些方法可能会引发 .NonUniqueResultException

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


答案 2

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

下面是一个使用 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

推荐