CakePHP - удаление данных по связанному ключу

У меня есть несколько таблиц, которые связаны через отдаленные отношения - например:

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 ответ

Используйте контейнерное поведение, чтобы найти записи 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);
   }
}

Обратите внимание, я не проверял эту функцию.

Другие вопросы по тегам