1

データベースから3つのテーブルをつなぐモデルの作り方は? 私のDB構造は次のとおりです。

  • ユーザー
    • ID
    • その他の分野
  • ユーザー情報
    • ID
    • users_id - 「users」テーブルへの外部キー
    • その他の分野
  • users_credentials
    • ID
    • users_id - 「users」テーブルへの外部キー
    • その他の分野

以前は、1 つのモデルに 2 つのテーブルを結合したかったので、addRelatedEntity メソッドを使用しました。これが私のコードです:

class Model_UserInfo extends Model_Table{
    public $entity_code = 'user_info';
    function init(){
        parent::init();
        $this->addField('phone')->caption('Nr tel');
        $this->addField('users_id');
    }
    function addRelation(){
        $this->addRelatedEntity('i','users','users_id','left outer');
    }

}

そして、それを他のファイルで拡張します-

class Model_User extends Model_UserInfo{
    function init(){
        parent::init();
        parent::addRelation();

        $this->newField('name')->caption('Imie')->mandatory(true)->relEntity('i','name');
    }

}

そして、それはうまくいきました。しかし、3 つのテーブルを結合して 1 つのモデルにしたい場合はどうすればよいでしょうか? 2クラス延長できません。Model_User で addRelatedEntity を使用し、Model_UserInfo と Model_Credentials を参照する方法はありますか?

4

1 に答える 1

1

おそらく、結合を逆にして、他の 2 つのテーブルで結合された "user" テーブルから開始する必要がありますが、正しいクエリを取得する限り、それほど重要ではありません。

まず、$this->debug();モデルの初期化に追加します。これは、結合や更新などをデバッグするときに非常に役立ちます。

class Model_User extends Model_Table {
    public $entity_code='users';
    function init(){
        parent::init();
        $this->newField('name')
            ->caption('Imie')
            ->mandatory(true);
    }
}

class Model_User_Combined extends Model_User {
    function init(){
        parent::init();

        $this->addRelatedEntity('info','users_info','inner','related');
        $this->addRelatedEntity('cred','users_credentials','inner','related');

        $this->addField('phone')->caption('Nr tel')->relEntity('info');
        $this->addField('password')->caption('Parol')->relEntity('cred');
    }
}

現在のソリューションと比較すると、これは「ユーザー」をマスター テーブルとして使用し、追加のテーブルを「関連」として結合します。

また、継承の恩恵を受け、Model_Userいくつかの基本的なユーザー フィールドを追加します。

于 2012-01-11T18:39:29.003 に答える