使用DQL中的join删除函数

时间:2014-02-28 05:55:24

标签: symfony twig dql

我正在尝试使用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 

3 个答案:

答案 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'文件中的

..

希望能帮助你!