2015-06-28 97 views
3

我试图在我的FacebookEventResult实体上执行本机查询,并使用我的FacebookEvent实体创建一个连接。Symfony doctrine在本机查询中未定义的索引

相关映射在FacebookEventResult:

相关映射在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

我曾试图按照these instructions从学说。

+0

我认为你需要指定你想在select语句中检索的所有列字段 – Matteo

+0

请你让我知道究竟是什么错误。把你的错误放在这里 –

+0

他thnx回答。我以其他方式解决了这个问题,并且我没有这个代码来再次测试它 – BigJ

回答

-1

如果你忘了请加在你的脚本这一个

use Doctrine\ORM\Query\ResultSetMapping; 
+1

wat?这是如何回答这个问题的? – rottenoats

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

注:在此之前作为一个临时的解决办法给我;看起来他们自己的例子不起作用,或者需要缺少某些东西并且没有很好的记录。