【问题标题】:can't get result object in doctrine在教义中无法获得结果对象
【发布时间】:2017-04-24 09:42:44
【问题描述】:

我得到了这样的 DQL:

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

我希望结果将作为具有 2 个属性的对象返回:登录,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');

【问题讨论】:

  • 你会得到什么对象?
  • 我得到了数组的结果
  • 请从查询中删除->select('login,id')
  • 你总是可以使用 Doctrine 中的 getSQL() 来查看你的 SQL 查询是什么

标签: symfony doctrine dql


【解决方案1】:

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

如果您需要单个结果:

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

【讨论】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      相关资源
      最近更新 更多