首页 > 解决方案 > 一次查询删除 CAKEPHP 3 中所有关联表的数据

问题描述

我有一个表产品和一些通过product_id 与它连接的表。当产品从产品表中删除时,我想从所有其他表中删除此产品 ID 的所有行。现在怎么能以方便的方式做到这一点?我正在尝试如下:

$productTable = [
        'related_products',
        'quantities',
        'products_tags',
        'products_settings',
        'products_details',
        'categories_products',
    ];
    $tableObj = TableRegistry::get('Products');
    $query = $tableObj->query();
    $result = $query->deleteAll()
        ->contain($productTable)
        ->where(['store_id' => $storeId])
        ->execute();

标签: mysqlcakephp-3.0

解决方案


在 Cakephp 中有一个依赖属性可以从其他表中删除相关数据。

当依赖键设置为 true 并删除实体时,关联的模型记录也将被删除。在这种情况下,我们将其设置为 true,以便删除用户也会删除她关联的地址。

要使用它,只需创建您的association并添加dependenttrue。例如

/* In a Table's initialize method. */
$this->hasMany('Comments', [
    'dependent' => true,  /* Add this line */
]);

Cake -> 关联 - 将表链接在一起


推荐阅读