在ZF2中删除父数据时,从MySQL数据库表中删除所有子数据

时间:2017-01-27 07:19:59

标签: zend-framework2

我在Zf2中有一个简单的项目。我正在使用MySql数据库。 我在数据库中有以下表格。

1。省

2。地区:它取决于 provinces 表。即,各省表的id是此表中的外键。

第3。城市:它取决于区域表。即,表的id是此表中的外键。

我想删除父表中的数据时从依赖表中删除所有相关数据。如,

1.当表中的数据被删除时,应删除区和城市表中的数据。

  1. 删除表中的数据后,应删除城市表中的数据。
  2. 我在 Project_Name \ module \ Module_Name \ src \ Module_Name \ Model

    中各自的表中都有函数 例如,删除的功能是:

     public function deleteProvinces($id)
     {
         $this->tableGateway->delete(array('id' => (int) $id));
     }
    

    $ id 是要删除的省份ID。

    删除的功能是:

    public function deleteDistricts($id)
     {
         $this->tableGateway->delete(array('id' => (int) $id));
     }
    

    $ id 是要删除的地区的ID。

    删除城市的功能是:

    public function deleteCities($id)
     {
         $this->tableGateway->delete(array('id' => (int) $id));
     }
    

    $ id 是要删除的城市ID。

    我想了很多,但没有找到解决方案。 任何想法或建议都非常感激。提前谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用MySQL ON DELETE CASCADE参考行动。

请参阅MySQL docs

中的参考操作

答案 1 :(得分:1)

如果需要,使用应用程序提供的服务,在本例中为MySql创建表时,可以添加FK约束ON DELETE CASCADE。这项工作比删除依赖表中的各个行

快得多

当行数开始增加时,我在使用ON DELETE CASCADE时看到了多倍性能提升

区域表的约束

CONSTRAINT `provinces_district` FOREIGN KEY (`provinces_id`) REFERENCES `provinces` (`id`) ON UPDATE NO ACTION ON DELETE CASCADE

城市表的约束

CONSTRAINT `district_cities` FOREIGN KEY (`district_id`) REFERENCES `districts` (`id`) ON UPDATE NO ACTION ON DELETE CASCADE
相关问题