删除cakephp中的多级(链删除)

时间:2013-09-05 11:11:32

标签: php cakephp model cakephp-2.3 cascading-deletes

我想删除所有相关的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);

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

我想要:我正在删除分支,因此应该删除所有依赖的dealbranch并删除所有依赖(依赖于dealbranch)交易记录

这里Deal是Dealbranch的孩子,Dealbranch是分店的孩子

现在,对于一个分支,Dealbranch中有多个记录,对于多个Dealbranch,Deal中有一条记录

enter image description here

请帮帮我。我正在使用cakephp 2

3 个答案:

答案 0 :(得分:0)

可以使用

删除与Branch关联的所有模型记录

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

我认为如果你想删除删除分支记录的交易记录,那么你的模型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
    )

 );

或者您可以尝试这样

<强>更新

根据您的要求这里Deal是Dealbranch的孩子,Dealbranch是分店的孩子你的模特协会应该是这样的。

交易分支模型应该是这样的。

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',
    )
);

答案 1 :(得分:0)

虽然我知道cakephp上的人不在他们的数据库中使用外键并依赖框架来处理这些细节,但是如果框架给你带来问题并且你可以控制数据库更新你的外国人DELETE DB操作中CASCADE的关键约束。

答案 2 :(得分:0)

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

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

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

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);

因为默认情况下第二个参数为真。

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