2012-01-11 7 views
1

データベースから3つのテーブルを接続するモデルの作成方法は?私のDB構造は次のとおりです。複数のテーブルのデータを1つのモデルに入れる方法は?

  • ユーザー
    • ID
    • 他の分野
    • ID
    • users_id users_info - 他の 'ユーザー' テーブルへの外部キー
    • フィールド
  • users_credentials
    • ID
    • users_id - 'ユーザー' テーブルへの外部キー
    • 他の分野

元、私は、一つのモデルに結合した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を参照する方法はありますか?

+0

parent :: addRelation();を呼び出します。オブジェクト指向プログラミングの点では良い方法ではありません。 $ this-> addRelation();関数が現在のクラスで定義されていない場合、親から継承されているので、まったく同じように動作します。ただそれを指摘したかったのです。 – romaninsh

答えて

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は基本的なユーザーフィールドを追加します。