无法在学说中获得结果对象
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');
使用实体作为结果的更好方法 http://symfony.com/doc/current/doctrine.html#creating-an-entity-class
据我了解,您只需要一个结果,因此请使用存储库中的下一个代码:
$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());
我得到的 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');
使用实体作为结果的更好方法 http://symfony.com/doc/current/doctrine.html#creating-an-entity-class
据我了解,您只需要一个结果,因此请使用存储库中的下一个代码:
$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());