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

can't get result object in doctrine

我得到的 DQL 是这样的:

$sql =$qb->select('login,id')
->from('Cusomter','c')
->where('c.login = :login')
->setParameter('login',$login);
$rs = $sql->getQuery()->getResult();

我希望结果 return 作为具有 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');

  1. 使用实体作为结果的更好方法 http://symfony.com/doc/current/doctrine.html#creating-an-entity-class

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

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

有几种方法可以解决这个问题。如果这是您需要重用的查询,那么 Doctrine 自定义水化器可能是最好的方法。如果没有,您可以简单地将结果转换为一个对象。

如果您需要单个结果:

$sql =$qb->select('c.login, c.id')
    ->from('Cusomter','c')
    ->where('c.login = :login')
    ->setParameter('login', $login);
$rs = (object) $sql->getQuery()->getSingleResult();

如果您需要 return 一个对象数组(即多个结果项),那么您可以只转换每个结果:

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