0

Cake 2.x を使用すると、3 つのテーブルがあります (この例では、cakephp の複数形/単数形の規則を削除して名前を短縮しました):

  1. メイン(サブ1が多い)
  2. Sub1 (main に属し、多数の Sub2 があります)
  3. Sub2(sub1に所属)

Main からカテゴリを削除すると、依存するすべての sub1/sub2 項目が $this->Main->delete($id, true) 呼び出しを使用して適切に削除されます。

ただし、Sub1 から項目を削除し、sub2 のすべてのプロパティを削除する方法がわかりません。コントローラーは、テーブルの 3 つのレベルすべてを操作する必要があります。私は試した:

$this->loadModel('Sub1');
$res = $this->Sub1->delete($id, true);

ただし、Sub2 へのモデル バインディングを取得して削除するわけではありません。ケーキでこの種のことを行うための適切な規則は何ですか、および/または私が間違っていることは何ですか?

4

1 に答える 1

1

私がチェックすることをお勧めする2つのことがあります:

1)dependent両方の関連付け、つまり Main の $hasMany と Sub1 の $hasMany に true が設定されていることを確認します。

2) これらの関連付けのいずれかで「排他的」が true に設定されていないことを確認します。料理本から:

Exclusive が true に設定されている場合、再帰モデルの削除は、各エンティティを個別に削除するのではなく、deleteAll() 呼び出しで削除を行います。これによりパフォーマンスが大幅に向上しますが、すべての状況に適しているとは限りません。

dependentが true で、両方の関連付けが false の場合、ソース コードexclusiveからわかるように、Cake は関連付けを再帰的に削除する必要があります。

最後に、現在の問題とは関係ありませんが、覚えておくべきいくつかの小さなヒントがあります。

a)
コントローラーから提供したコード スニペットでは、Sub1 モデルを読み込む必要はありません。すでに利用可能です。したがって、次のように呼び出すことができます。

$res = $this->Main->Sub1->delete($id, true);

b)メソッドtrueの 2 番目のパラメーターとして渡す必要はありません。deleteこれは、既定値が既に であるためですtruehttp://book.cakephp.org/2.0/en/models/deleting-data.htmlを参照してください

c) メイン、サブ 1、およびサブ 2 モデルの具体的な違いが何であるかは明らかにわかりません。しかし、それらが本質的に同じものであり、階層を追跡したいだけの場合は、ツリーの動作を調べる必要があります

于 2013-08-16T04:41:55.057 に答える