无法在学说中获得结果对象

时间:2017-04-24 09:42:45

标签: symfony doctrine dql

我得到了这样的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');

2 个答案:

答案 0 :(得分:3)

有几种方法可以解决这个问题。如果这是您需要重复使用的查询,那么Doc​​trine定制水合器可能是最好的方法。如果没有,您可以简单地将结果转换为对象。

如果您需要一个结果:

$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)

  1. 使用实体作为结果的更好方法has to say

  2. 据我所知,您只需要一个结果,因此请使用存储库中的下一个代码:

    $ rs = $ this-> findOneBy(['login'=> $ login]);