0

私は Cakephp のタグ付けシステムに取り組んでいます。タグは、ルートである他のタグの子になることができます。(子供の子供はいません)。

モデルはユーザーとタグです。それらの関係は次のようになります。

//User.php:

public $hasAndBelongsToMany = array(
        'Tag' => array(
            'className' => 'Tag',
            'joinTable' => 'users_tags',
            'foreignKey' => 'user_id',
            'associationForeignKey' => 'tag_id',
            'unique' => true,
        ),
    );

//Tag.php:
var $belongsTo = array(
        'Parent' => array(
            'className' => 'Tag',
            'foreignKey' => 'parent_id',
            'dependent' => true,
        ),
    );

単純なページネーションをしようとすると、

$this->User->recursive = 2;
$this->set('users', $this->paginate());

次のような奇妙な結果が得られます。

array(
(int) 0 => array(
    'User' => array(
        ...
    ),
    'Tag' => array(
        (int) 0 => array(
            'id' => '1',
            'parent_id' => null,
            ...
            'Parent' => array()
        ),
        (int) 1 => array(
            'id' => '2',
            'parent_id' => '1',
            ...
            'Parent' => array(
                'id' => '1',
                'parent_id' => null,
                ...
            )
        )
    )
),
(int) 1 => array(
    'User' => array(
        ...
    ),
    'Tag' => array(
        (int) 0 => array(
            'id' => '1',
            'parent_id' => null,
            ...
            'Parent' => array(
                'Parent' => array()  //What's up with this parent inside the parent?
            )
        ),
        (int) 1 => array(
            'id' => '2',
            'parent_id' => '1',
            ...
            'Parent' => array(
                'id' => '1',
                'parent_id' => null,
                ...
            )
        )
    )
)

)

奇妙な結果を返したタグは、実際には配列の最初のタグと同じタグ (id #1) であることがわかります。なぜそれが直前で、2回目は間違っているのか、私は混乱しています..?

4

0 に答える 0