2013-09-05 107 views
5

我想删除所有相关rable记录删除多级(链删除)

我协会

分公司模式

var $hasMany =array(
    'Dealbranch' => array(
     'className' => 'Dealbranch', 
     'foreignKey' => 'DLB_BR_ID', 
     'dependent' =>true 
    ) 
); 

Dealbranch型号

var $belongsTo = array(
    'Deal' => array(
     'className' => 'Deal', 
     'foreignKey' => 'DL_ID', 
     'dependent' => true 
    ), 
    'Branch' => array(
     'className' => 'Branch', 
     'foreignKey' => 'DLB_BR_ID', 
    ) 
); 

交易模式

var $hasMany = array(
    'Dealbranch' => array(
     'className' => 'Dealbranch', 
     'foreignKey' => 'DLB_DL_ID', 
    ) 
); 

在控制器我已经使用

$this->Branch->delete($id,true); 

现在,这里whem我删除分支,如此依赖dealbranch成功删除,但没有任何交易记录的删除

我想像:我正在删除分支,所以所有依赖dealbranch应该被删除,所有依赖(取决于dealbranch)交易记录应该被删除

这里交易Dealbranch和Dealbranch的孩子分支的孩子现在

,对于一个分支有在Dealbranch多个记录,以及对多种Dealbranch存在新政

enter image description here

一个记录请帮我。我使用CakePHP 2个

回答

0

全部由使用

$this->Branch->delete($id,true);

我觉得如果你要删除的交易记录上的分支删除记录,然后你的模型Branch相关的可以删除模型记录Branch应与Deal模型相关联。

只是尝试添加这样

分公司模式

var $hasMany =array(
    'Dealbranch' => array(
     'className' => 'Dealbranch', 
     'foreignKey' => 'DLB_BR_ID', 
     'dependent' =>true 
    ), 
    'Deal' => array(
     'className' => 'Deal', 
     'foreignKey' => 'your_foriegn_key', 
     'dependent' =>true 
    ) 

); 

,或者你可以尝试这样的

更新:

根据您的要求这里新政是Dealbranch和De的孩子albranch是分支的小孩,你的模特协会应该是这样的。

交易分行模式应该是这样的。

DealBranch型号

var $belongsTo = array(
    'Branch' => array(
     'className' => 'Branch', 
     'foreignKey' => 'DLB_BR_ID', 
    ) 
); 
var $hasMany = array(
    'Deal' => array(
     'className' => 'Deal', 
     'foreignKey' => 'DL_ID', 
     'dependent' => true 
    ), 
); 

交易模式应该是这样的。

交易模式

var $belongsTo = array(
    'Dealbranch' => array(
     'className' => 'Dealbranch', 
     'foreignKey' => 'DLB_DL_ID', 
    ) 
); 
+0

但是分支和交易之间没有任何直接关系 –

+0

必须有一个关系为了删除'Branch'删除'Deal',否则您需要手动编写代码来删除交易记录 –

+0

ok,意味着我们不能删除递归(树)删除? –

0

虽然我认识的人在CakePHP的没有在他们的数据库使用外键并依靠框架来充分利用这些细节问题,在你的情况下,如果框架是给你的问题,你可以控制数据库在DELETE DB操作上将外键约束更新为CASCADE。

0

基本问题在于你的数据模型。根据您的模型,任何分支都可以连接到零个或多个交易,反之亦然。因此,如果您删除分支,删除任何交易没有任何意义,因为交易可能与另一分支有关。如果交易被删除,数据库完整性将被破坏。

您使用的设置通常用于建模M:N关系。

整个画面,如果你的数据模型:

original model

,哪些是你真正的意思是:

new model

分公司模式

var $hasMany =array(
'Deal' => array(
    'className' => 'Deal', 
    'foreignKey' => <set_according_to_your_column_names>, 
    'dependent' =>true 
    ) 
); 

交易模式

var $hasMany = array(
'Branch' => array(
    'className' => 'Dealbranch', 
    'foreignKey' => <set_according_to_your_column_names>, 
) 
); 

这样,你只能在控制器电话:

$this->Branch->delete($id,true); 

甚至

$this->Branch->delete($id); 

,因为第二个参数默认为true。


M的

实施例:N关系是人 - 地址。任何人都可以使用多个地址(例如家庭和工作),一个地址可以被更多的人(家人,同事)共享。