flo*_*r58 15 php doctrine doctrine-query doctrine-orm
我可以使用这种结构从数据库中获取我的数据:
$user = $this->getDoctrine()
->getRepository('AcmeDemoBundle:Emails')
->find(8081);
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我能够得到这样的数据:
$user->getColumnNameHere();
Run Code Online (Sandbox Code Playgroud)
基本上我可以使用实体类.
但是,如果我想使用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();
Run Code Online (Sandbox Code Playgroud)
$ product返回数组.是否可以使用实体Managaer类获取它?如果有,怎么样?
我挖掘文档,但似乎不可能或不存在于文档或我只是盲目:)
Flo*_*ian 25
是的你可以,通常使用:
$repository
->createQueryBuilder('p')
->getQuery()
->execute()
;
Run Code Online (Sandbox Code Playgroud)
这应该返回一组实体.
如果要获得单个实体结果,请使用getSingleResult或getOneOrNullResult:
$repository
->createQueryBuilder('p')
->getQuery()
->getOneOrNullResult()
;
Run Code Online (Sandbox Code Playgroud)
警告:这些方法可能会抛出NonUniqueResultException.
编辑:好的,所以问题是关于部分对象:http://docs.doctrine-project.org/en/latest/reference/partial-objects.html
ism*_*.G. 18
您可以使用"部分对象"获取对象而不是数组.
这是一个使用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
Run Code Online (Sandbox Code Playgroud)
如果您希望从原始查询中返回一个对象:
$product->createQueryBuilder('p')
->setMaxResults(1)
->where('p.idx = :idx')
->select('p.columnNameHere')
->setParameter('idx', 8081)
->orderBy('p.idx', 'DESC')
->getQuery();
$product = $query->getResult();
Run Code Online (Sandbox Code Playgroud)
删除此行
->select('p.columnNameHere')
Run Code Online (Sandbox Code Playgroud)
一旦你使用select,它将返回一个数组......