Множественный (шардинговый) стол в модели CakePHP - PullRequest
1 голос
/ 22 ноября 2010

Существует много таблиц:

 table_2010
 table_2009
 table_2008
 table_2007
     .
     .

Использование MySQL 4 + PHP5 + CakePHP 1.3

Мой вопрос

Как обрабатывать эти таблицы вмодель?Я хочу так относиться

  Table->find('all',"2010",array("conditions"=>""));

Ответы [ 2 ]

1 голос
/ 22 ноября 2010

Я согласен с Ником - если только вы не расшаривались по соображениям производительности, я бы объединил все ваши таблицы в одну таблицу со столбцом на год (если вы сделаете INT, это не сильно повлияет на производительность).

Однако, если вам нужно разделить таблицы, я бы рекомендовал просто переопределить метод Model :: find () для принятия дополнительных параметров.В вашей модели напишите что-то вроде приведенного ниже псевдокода:

function find( $type, $options = array() ) {
 if( isset( $options['table'] ) ) { // this is the index where you'll pass your table name
  $this->setSource( $options['table'];
 }

 return parent::find( $type, $options );
}

По сути, вызов setSource изменит вашу таблицу, к которой вы обращаетесь, во время выполнения.См. Может ли модель CakePHP изменить свою таблицу без повторного создания? для получения дополнительной информации.

0 голосов
/ 22 ноября 2010

Для меня разумнее всего использовать одну таблицу - например, столбцы и в этой таблице иметь специальный столбец с именем year. Так что находка будет примерно такой:

$ this-> Post-> find ('all', массив ('year' => 2010));

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