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

ala*_*ine 3 cakephp model

我目前正试图以太多关系来操纵数据库.我不会让它变得复杂,所以这是一个非常简单的例子:

我的桌子(动物):id,类型,标题

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

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

有可能吗?

Chu*_*ess 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
   }
}
Run Code Online (Sandbox Code Playgroud)

虽然这是你可以实现这一目标的方式,但似乎最好将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')));
   }

}
Run Code Online (Sandbox Code Playgroud)