0

CakePHP 1.3 の TreeBehavior を使用しています。1 つの DB テーブルで、すべてのモデル レコードを取得します。すべてのレコードにはtype、モデル名が格納されるフィールドがあります。今まですべてがチャームとして機能しています。しかし、特定のアクションでいくつかのエラーが発生します。まず第一に$this->Article->verify()、ほとんどすべてのレコードでエラーが発生します。

Array
(
[0] => Array
    (
        [0] => index
        [1] => 1
        [2] => missing
    )

[1] => Array
    (
        [0] => index
        [1] => 2
        [2] => missing
    )

[2] => Array
    (
        [0] => index
        [1] => 3
        [2] => missing
    )
 ....

エラーのあるレコードとエラーのないレコードの間に違いはありません

私は試しRecoverましたが、それでも同じです。これらのエラーが表示される理由とその意味を教えてください。ツリー データを確認しましたが、すべてのフィールド ( parent_idlftrght) は正しいです。

もう1つの問題:

upレコードとツリーを移動したいと思いdownます。scopeレコードに設定するtypeと移動しますが、他のタイプのすべての子レコードは移動しません。私のツリーは次のようなものです:

 Category
    Category
       Category
       Attachment
    Category
       Attachment
    Article
       Attachment
       Attachment
    Article
       Attachment
    Attachment
 Category
 Category

レコードの移動を設定scopeしないと、ツリーの終わりが表示されず、他のレコード タイプ間で移動し始めることがあります。scopeこれを回避するにはどうすれば設定できますか?

編集:考えられる問題を追跡しましたが、おそらくすべては、1 つのテーブルを使用して複数のモデルで両方TreeTranslate(言及していません) 両方の動作を使用することに起因します。それでどうなるか:

各モデルのデータを保存すると、翻訳とともに i18n テーブルにレコードも保存されます。また、テーブルをチェックverifyまたはrecovering する場合、ツリー動作は現在のモデルの投稿のみを「参照」し、他のモデルからのレコードを表示しないため、「欠落したインデックス」も提供します。

これを修正する方法、機能させる方法、または他のオプションを探す方法はありますか?

1 つのデータベース内で複数のツリーを使用するオプションはありますか。したがって、rght、lft の値はすべてのモデルで複製されますが、互いに「認識」しないため、競合は発生しません。同じ構造を持つ10以上ではなく、1つのテーブルを使用するだけです

4

1 に答える 1

0

ツリーのメタデータが正しい場合は、次のようにして、独自のコードにない問題を修正する必要があります。

$this->Article->recover($mode = 'tree');

詳細については、 http://book.cakephp.org/1.3/view/1356/Data-Integrityを参照してください。

于 2012-10-14T23:33:30.143 に答える