2012-02-22 3 views
3

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

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

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

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

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

ответ

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'))); 
    } 

} 
Смежные вопросы