Symfony doctrine本机查询中的未定义索引

时间:2015-06-28 00:13:11

标签: symfony doctrine-orm

我正在尝试在我的FacebookEventResult实体上执行本机查询,并使用我的FacebookEvent实体创建一个连接。

FacebookEventResult中的相关映射:

/**
 * @ORM\Column(type="integer", options={"unsigned":true})
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @ORM\ManyToOne(targetEntity="FacebookEvent", inversedBy="facebookEventResults")
 * @ORM\JoinColumn(name="facebook_event_id", referencedColumnName="id", nullable=false)
 **/
protected $event;

FacebookEvent中的相关映射:

/**
 * @ORM\Column(type="integer", options={"unsigned":true})
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @ORM\OneToMany(targetEntity="FacebookEventResult", mappedBy="event")
 **/
protected $facebookEventResults;

我的查询代码:

$rsm = new ResultSetMapping();
$rsm->addEntityResult('AppBundle:FacebookEventResult', 'fer');
$rsm->addFieldResult('fer', 'id', 'id');
$rsm->addFieldResult('fer', 'event_date', 'eventDate');
// $rsm->addFieldResult('fer', 'facebook_event_id', 'event'); // this doesnt help
// some other mappings here as well, also tried without

$rsm->addJoinedEntityResult('AppBundle:FacebookEvent' , 'fe', 'fer', 'event');
$rsm->addFieldResult('fe', 'id', 'id');
// some other mappings here as well, also tried without

$sql = 'SELECT *
        FROM facebook_event_result fer
        INNER JOIN facebook_event fe ON fer.facebook_event_id = fe.id';

$query = $this->getEntityManager()->createNativeQuery($sql, $rsm);
return $query->getResult();

执行时我收到以下错误:

注意:未定义索引:id

我试图从Doctrine跟随these instructions

2 个答案:

答案 0 :(得分:0)

请参阅:https://github.com/doctrine/doctrine2/issues/2482

我在github线程中没有看到任何解决方法,他们确实提出了一个对我有用的替代方案:ResultSetMapping#addScalarResult($columnName, $alias)

所以,这样的事情应该有效:

$rsm = new ResultSetMapping();
$rsm->addScalarResult('id', 'id');
$rsm->addScalarResult('event_date', 'eventDate');

$sql = 'SELECT *
    FROM facebook_event_result fer
    INNER JOIN facebook_event fe ON fer.facebook_event_id = fe.id';

$query = $this->getEntityManager()->createNativeQuery($sql, $rsm);
return $query->getResult();

注意:这对我来说是临时修复;看起来他们自己的例子不起作用,或者需要一些缺失的东西,而且没有很好的记录。

答案 1 :(得分:-1)

如果您忘记了,请在脚本中添加此内容

use Doctrine\ORM\Query\ResultSetMapping;