2009-04-03 17 views

答えて

5

手動でこの文から推測:

モデルは、データベース内の特定のテーブルに、より具体的には一般的にデータベースへのアクセスポイントである、と。デフォルトでは、各モデルはテーブルの名前を使用しています。そのテーブルの名前は複数のテーブルで、「ユーザー」モデルでは「ユーザー」テーブルが使用されます。

私はそうは思いませんが、必要なものを関係づけることができます。

Check this

+0

「この項目を確認」リンクを開くことができません。 –

1

それは...同時に複数のテーブルを持つことはできませんが、別のものにモデルのテーブルを切り替えるようにモデル:: useTableプロパティを変更することができるかもしれません。それが旋風を与え、それが動作するかどうか私達に知らせてください。

2

技術的には、あなたが質問している方法に基づいて、私が知っているものではありません。しかし、しばしば、私は何かに関係を使用しますかもしれないあなたがしているものに似ている。たとえば、人は人のテーブルに簡単にドロップできるアドレス情報を持っていますが、私は通常、他のエンティティもアドレス(ビジネスなど)を持つことができるため、取り除くことを好みます。

DBに擬似継承モデルを実装したい場合は同じ考えです。たとえば、ボランティアは人ですが、請負業者、ベンダー、従業員もそうです。すべては、人のテーブルに保存する可能性のある特定のプロパティと、その人のタイプに固有のその他のプロパティを共有します。

どちらのモデルも2つのモデルがありますが、それらは関連付けによってシームレスに動作します。

これは、あなたが考えているシナリオのようなものであれば、複数のテーブルを持つモデルではありませんが、同様のアプローチが有効です。

1

子テーブルから情報を取得するときに、親テーブルに格納されたデータを結合する必要がある、ある種の継承をデータベースに実装したいと思います。 これを解決する私のアプローチは、子モデルでafterFindコールバックを使用していました。

function afterFind($results) { 
    foreach ($results as $key => $val) { 
       $fieldRetrieved=$this->query("SELECT *field* FROM *parent_table* WHERE id={$val['*ChildModelName*']['id']}"); 
       $results[$key]['*ChildModelName*']['*field*']=$fieldRetrieved[0]['*parent_table*']['*field*']; 
    } 
    return $results; 
} 

を私はフィールド/ sの子テーブルから得られた結果を親テーブルからを含めたこの方法では次のように私は、コールバックを再定義しました。この例では、両方のテーブルがidというフィールドのインデックスであり、子テーブルのそのフィールドも親テーブルの外部キーである(つまり擬似継承を作成する)と仮定しています。

4

確かに、同じテーブルがたくさんあるときは便利です。

class SomeModel extends Model 
{ 
    var $useTable = false; 

    public function ReadData() 
    { 
     // select table 
     if($a == 1) 
      $this->setSource('tableName1'); 
     else if($a == 2) 
      $this->setSource('tableName2'); 
     // ... 
     else if($a == N) 
      $this->setSource('tableNameN'); 

     // now perform operations with selected table 
     return $this->find('all'); 
    } 
} 
+0

単一の 'source'を定義するのではなく、テーブルのセット全体で' find( 'all') 'を実行できますか? – Oliboy50

関連する問題