0

こんにちは、私は DataMapper で CodeIgniter を使用していますが、モデル クラス (DataMapper モデル クラス) で関係を定義するための助けが本当に必要です。

このためのモデル関係をどのように記述しますか。Self 関係、つまりメニュー項目とサブメニューについて少し混乱している

メニューには多数のサブメニューがあり、サブメニューには 1 つ以上のサブサブメニューを含めることができます

クラス: ナビゲーション
表: ナビゲーション
[id] [parent_id] [名前] ..

ありがとう

4

1 に答える 1

1

これは 1 対多の関係です (アイテムには 1 つの親があり、親は複数のアイテムを持つことができます)。

したがって、モデルは次のようになります。

class Menu extends DataMapper {

    public $has_one = array(
        'parent' => array(
            'class' => 'menu',
        ),
    );

    public $has_many = array(
        'menu' => array(
            'class' => 'menu',
                'other_field' => 'parent',
        ),
    );

}

これにより、次のことが可能になります。

// assume your tree root has parent id 0
$root = new Menu();
$root->where('parent_id', 0)->get();

// get the first level menu from the root
$submenu = $root->menu->get();

// get the parent from the first submenu entry (should be root again)
$rootagain = $submenu->parent->get();

(CI フォーラムで既に回答したように) これはあまり最適なソリューションではないことに注意してください。ツリーは複数のレベルの入れ子になる可能性があるためです。この設定では、一度に 1 つのレベルしか取得できないため、反復する必要があることを意味します。ひとり親の場合。これは、あらゆるサイズの木にとって悪夢になります。

テーブル内にネストされたセット ツリーを構築できるようにする、nestedsets 拡張機能を確認し、これらのセットを操作するためのメソッドを Datamapper に追加します (親、子、兄弟の操作、ツリー内の特定の場所への新しいレコードの挿入など)。 )。

于 2012-05-09T20:27:57.907 に答える