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

ここで branch を削除しているので、依存する dealbranch は正常に削除されましたが、どの取引レコードも削除されませんでした

私が欲しいのは:ブランチを削除しているので、依存するすべてのdealbranchを削除し、すべての依存する(dealbranchに依存する)取引レコードを削除する必要があります

ここで Deal は Dealbranch の子であり、Dealbranch は branch の子です

現在、1 つのブランチの場合、Dealbranch に複数のレコードがあり、複数の Dealbranch の場合、Deal に 1 つのレコードがあります。

ここに画像の説明を入力

私を助けてください。私はcakephp 2を使用しています

4

3 に答える 3

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

基本的な問題はデータ モデルにあります。モデルによると、任意のブランチを 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);

2 番目のパラメーターはデフォルトで true であるためです。


1 M:N 関係の例は、人 - 住所です。誰でも複数のアドレス (自宅と職場など) を使用でき、1 つのアドレスをより多くの人 (家族、同僚) で共有できます。

于 2016-09-20T20:45:19.923 に答える