Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在原则2中获取类而不是数组_Php_Doctrine_Doctrine Orm_Doctrine Query - Fatal编程技术网

Php 如何在原则2中获取类而不是数组

Php 如何在原则2中获取类而不是数组,php,doctrine,doctrine-orm,doctrine-query,Php,Doctrine,Doctrine Orm,Doctrine Query,我可以使用以下结构从数据库中获取数据: $user = $this->getDoctrine() ->getRepository('AcmeDemoBundle:Emails') ->find(8081); 当我这样做时,我能够获得如下数据: $user->getColumnNameHere(); 基本上我能够使用实体类 但是如果我想使用QueryBuilder而不是find,我只会得到关联数组 $product->createQueryBuilder('p')

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

$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实体管理器类获取它?如果是,如何进行

我翻阅了文档,但它似乎不可能或不存在于文档中,或者我只是个盲人:)

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

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

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

$repository
    ->createQueryBuilder('p')
    ->getQuery()
    ->execute()
;
这将返回一个实体数组

如果要获取单个实体结果,请使用
getSingleResult
getOneOrNullResult

$repository
    ->createQueryBuilder('p')
    ->getQuery()
    ->getOneOrNullResult()
;
警告:这些方法可能引发
ununiqueresultexception


编辑:好的,问题是关于部分对象:

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

以下是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

如果希望从原始查询返回对象,请执行以下操作:

    $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,它将返回一个数组…

否,我将获取几列,而不是一列。这个问题中的查询只是一个例子。不是所有的行,也不是一行。我认为你混合了列、行和实体的概念。@Crozin所说的是正确的。此外,如果您只想获取一列,那么使用
getSingleScalarResult
@Florian,是和否。这个问题中的问题只是一个例子。假设我想取4列。但是我不想用数组获取,我想用实体类获取?比如
$result->getColumn()
而不是
$result['column']我在这里遗漏了一些东西,因此照亮了我。:)使用
QueryBuilder
,它应该总是获取给定实体的所有列。@user1191081可以给出在不起作用的地方使用联接的代码示例,谢谢。我需要的是。谢谢