2012-02-22 4 views
3

私は現在、あまりに多くの方法でデータベースを操作しようとしています リレーションシップ。私は非常に 単純化した例であるので、ここで、あなたのためにそれが複雑に文句を言わない:cakephpの単一のテーブルの多くのモデル

私のテーブル(動物): ID、タイプ、タイトル

  • 1、大きな、象
  • 2、大、キリン
  • 3、小さな、猫
  • 4、私は何をしたいのか、小さな、犬

は2メートルを持っていることですビッグとスモールがあります。 「ビッグ」モデルは、タイプが「ビッグ」(象は とキリン)、 は動物を世話し、「スモール」モデルは動物を「スモール」(猫と 犬)の世話をします。

できますか?

答えて

6

はい、BigAnimalというモデルを作成し、$ useTable = 'animals'を定義することができます。 beforeFindとbeforeSaveを定義して、毎回型を 'ビッグ'に設定します。 SmallAnimalモデルでも同じことができます。これは、あなたがこれを達成することができます方法ですがここでは一例

class BigAnimal extends AppModel { 
    var $useTable = 'animals'; 

    function beforeFind($queryData) { 
     // set type to big here 
    } 

    function beforeSave() { 
     // set type to big here 
    } 
} 

あり、表に1対1のモデルを維持する方が良いだろうと思われます。次に、同じモデルから大小の動物を照会するために必要な機能を追加することができます。コードを少しきれいに保ちます。そうですね、

class Animal extends AppModel { 

    function findBigAnimals() { 
     return $this->find('all', array('conditions' => array('type' => 'big'))); 
    } 

    function findSmallAnimals() { 
     return $this->find('all', array('conditions' => array('type' => 'small'))); 
    } 

} 
関連する問題