2010-11-22 28 views
1

次のように多くのテーブルがあります。複数(シャーディング)テーブルモデルCakePHPの

table_2010 
table_2009 
table_2008 
table_2007 
    . 
    . 

のMySQL 4 + PHP5 + CakePHPのを使用するには、1.3

私の質問がある

これらを治療する方法モデルのテーブル?年と呼ばれる特殊な列を持つように例えばそのテーブルにポスト - 私は賢く方法は、一つのテーブルを使用することである私にとって、この

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

これはあなたを助けるかもしれないhttp://stackoverflow.com/questions/2710860/problem-with-altering-model-attributes-in-controller – Young

答えて

1

私はNikに同意します - パフォーマンス上の理由からシャーディングをしない限り、すべてのテーブルを1つのテーブルにまとめ、その年のカラムを使用します(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への呼び出し。詳細については、Can a CakePHP model change its table without being re-instantiated?を参照してください。

0

のように扱いたいです。したがって、findは次のようなものになります。

$ this-> Post-> find( 'all'、array( 'year' => 2010));