Symfony DeleteAction多表删除

时间:2018-09-29 23:01:28

标签: symfony

嗨,我要删除其他表中的产品。我想在控制器上执行此操作。

plotData$data
#   values   ind   sdata
#1 1026674 lnorm 1050000
#2 1158492 lnorm 1100000
#3 1247944 lnorm 1230000
#4 1327616 lnorm 1300000
#5 1407939 lnorm 1450000
#6 1497825 lnorm 1459785
#7 1613479 lnorm 1654000
#8 1820639 lnorm 1888000

OR

$deleteQuery = $this->getDoctrine()
        ->getManager()
        ->createQueryBuilder('d')
        ->delete('TechnoSiteBundle:Sepet', 's')
        ->where('s.id = ' . $request->get('id'))->getQuery();
    $deleted = $deleteQuery->getResult();

我要删除两个相关产品。使用Cascade时出现此错误;

$deleteQuery = $em->getRepository('TechnoSiteBundle:Ebatlar')->createQueryBuilder('table1')
        ->where('table1.id')
        ->leftJoin('table1.sepet', 'table2')
        ->andWhere('table2.ebat1')
        ->delete('table1.id = table2.productid')
        ->getQuery();
    $deleted = $deleteQuery->getResult();

1 个答案:

答案 0 :(得分:0)

用很少的有关实体的信息来做不清楚。

一些值得探索的东西:

  • 如果您的两个product行相关,则可能需要在某个地方使用cascade={"remove"}注释。

  • 如果要手动删除两个实体,什么也不会阻止您运行两个查询。

  • 一些有关Doctrine,Symfony和MVC最佳实践的注释(与您的问题没有直接关系,并且您没有要遵循这些准则,但这绝对是您的事情应该紧随其后,因为从长远来看,这将使您的生活更加轻松):

    • 您不应该在控制器中添加太多逻辑。在Symfony中,您希望控制器几乎为空。您将在其中创建包含逻辑的服务,并通过适当的操作从控制器中调用它。随着项目的发展,它具有许多优势,您会注意到:更少的代码重复,无需更改控制器即可自由更改模型等。
    • bind parameters比使用->where('s.id = ' . $request->get('id'))之类的串联更好。用户可以伪造此$request->get('id')来在where子句中基本上插入他想要的任何内容。