Много моделей на одном столе в CakePHP - PullRequest
3 голосов
/ 22 февраля 2012

Я сейчас пытаюсь манипулировать базой данных слишком большим количеством связи. я не сделаю это сложным для вас, поэтому здесь очень упрощенный пример:

мой стол (животные): идентификатор, тип, заголовок

  • 1, большой, слон
  • 2, большой, жираф
  • 3, маленький, кот
  • 4, маленький, собака

я хочу, чтобы у меня были две модели: «Большая» и «Маленькая». «Большая» модель будет заботиться только о животных типа «большой» (слон и жираф), и «Маленькая» модель будет заботиться о животных с типом «маленький» (кошка и собака).

это возможно сделать?

1 Ответ

6 голосов
/ 22 февраля 2012

Да, вы можете создать модель с именем 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')));
   }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...