7

我想删除所有依赖的 rable 记录

我的协会

分支模型

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

交易分支模型

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,Dealbranch 中有一个记录

在此处输入图像描述

请帮我。我正在使用 cakephp 2

4

3 回答 3

0

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

于 2014-06-24T07:53:49.100 回答
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 是分支的子项,您的模型关联应该是这样的。

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

交易分支模型

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',
    )
);
于 2013-09-05T13:48:03.173 回答
0

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

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

如果您的数据模型的整体情况:

原始模型

你真正的意思是:

新模式

分支模型

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 关系的示例是人 - 地址。任何人都可以使用多个地址(例如家庭和工作),并且一个地址可以被更多人(家人、同事)共享。

于 2016-09-20T20:45:19.923 回答