我正在尝试使用Doctrine QueryBuilder来使用查询执行Delete功能 我需要删除2个表中的记录, 在TcTracks表中,id为“id”,在TcWall中,id为“related_id”
我的控制器
public function deleteAction(Request $request){
$deleteQuery = $this->getDoctrine()
->getManager()
->createQueryBuilder('d')
->delete('TcPlayerBundle:TcTracks', 'd')
->innerJoin('TcprofileBundle:TcWall', 't', 'ON', 'd.id = t.related_id')
->where('d.id = :dId')
->setParameter('wId', $request->get('related_id'))
->setParameter('dId', $request->get('id'))
->getQuery();
$deleted = $deleteQuery->getResult();
$deleted->flush();
return $this->render('TcPlayerBundle:Default:all.html.twig',array(
'tracks' => $tracks
));
}
我需要在两个表中删除相同的记录,但它对两个表都没有执行,请帮助我
我收到错误
Invalid parameter number: number of bound variables does not match number of tokens
答案 0 :(得分:0)
删除以下行:
->setParameter('wId', $request->get('related_id'))
只有:dId
但没有:wId
。
实际上,您通过'd.id = t.related_id'
进行了内部加入,因此无需再设置related_id
。
答案 1 :(得分:0)
您在查询中的任何位置都没有wID
参数。与此同时,您使用的->setParameter('wId', $request->get('related_id'))
在这种情况下已过时。尝试删除此行,它应该没问题。
答案 2 :(得分:0)
与您的实体进行一对多的实施
TcPlayerBundle:TcTracks
和
TcprofileBundle:TcWall
如果是这样的话,你可以这样做:
oneToMany:
cascade: [remove]
你的配置'yourentity.orm.yml'文件中的..
希望能帮助你!