CakePHP - 按关联密钥删除数据

时间:2015-02-04 13:59:23

标签: php cakephp cakephp-2.5

我有一些通过远程关系加入的表格 - 例如:

A.id = B.a_id, B.id = C.b_id, C.id = D.c_id

鉴于A.id,我想删除D中与A.id相关联的所有行。

由于Model::deleteAll()不接受任何联接,只有条件,我该如何处理呢?

所有模型(A,B,C,D)已经定义了belongTo个关系。

我的最后一招是原始SQL,但我想知道CakePHP是否有办法实现它。

我找不到类似的问题,因为它们都是关于删除所有相关数据,而不是通过相关密钥只删除一个表格的数据。

1 个答案:

答案 0 :(得分:1)

Use Containable behavior找到D记录

public function deleteD($idA){
$this->ModelA->Behaviors->load('Containable');

$options = array(
    'contain' => array(
       'ModelB' => array(
           'ModelC' = array(
               'ModelD'
           )
       )
    ),
    'conditions' => array('ModelA' => $idA)
);
$findDIds = $this->ModelA->find('all',$options);
debug($findDIds); // find right path to ModelD
$ids = Hash::extract($findDIds,'{n}.ModelD.id');
$this->loadModel('ModelD');
   foreach($ids as $id){
       $this->ModelD->delete($id);
   }
}

注意,我没有测试过这个功能。