在cakephp的单个桌上的许多模型

时间:2012-02-22 04:11:49

标签: cakephp model

我目前正试图以太多的方式操纵数据库 关系。我不会让它变得复杂,所以这里是非常的 简化示例:

我的桌子(动物): id,type,title

  • 1,大,大象
  • 2,大,长颈鹿
  • 3,小,猫
  • 4,小,狗

我想要做的是有两个型号“大”和“小”。 “大”模型只会照顾类型为“大”的动物(大象 和长颈鹿), 和“小”模型将照顾类型'小'的动物(猫和猫) 狗)。

有可能吗?

1 个答案:

答案 0 :(得分: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')));
   }

}