我得到了这样的DQL:
$sql =$qb->select('login,id')
->from('Cusomter','c')
->where('c.login = :login')
->setParameter('login',$login);
$rs = $sql->getQuery()->getResult();
我希望结果将作为具有2个属性的对象返回:Login,id。
无论如何我能做到吗?我试过了CustomHydrator
,但它无法解决问题。
这是我的CustomHydrator:
namespace Hydrator;
use Doctrine\ORM\Internal\Hydration\AbstractHydrator;
class CustomHydrator extends AbstractHydrator
{
protected function hydrateAllData()
{
return $this->_stmt->fetchAll(\PDO::FETCH_ASSOC);
}
}
然后我添加了$em->getConfiguration()->addCustomHydrationMode('CustomHydrator', 'Hydrator\CustomHydrator');
并运行:$rs = $sql->getQuery()->getResult('CustomHydrator');
答案 0 :(得分:3)
有几种方法可以解决这个问题。如果这是您需要重复使用的查询,那么Doctrine定制水合器可能是最好的方法。如果没有,您可以简单地将结果转换为对象。
如果您需要一个结果:
$sql =$qb->select('c.login, c.id')
->from('Cusomter','c')
->where('c.login = :login')
->setParameter('login', $login);
$rs = (object) $sql->getQuery()->getSingleResult();
如果你需要返回一个对象数组(即多个结果项),那么你可以只转换每个结果:
$sql =$qb->select('c.login, c.id')
->from('Cusomter','c')
->where('c.login = :login')
->setParameter('login', $login);
$rs_new = array_map(function ($value) {
return (object) $value;
}, $sql->getQuery()->getResult());
答案 1 :(得分:0)
使用实体作为结果的更好方法has to say
据我所知,您只需要一个结果,因此请使用存储库中的下一个代码:
$ rs = $ this-> findOneBy(['login'=> $ login]);