2011-01-19 11 views
4

"price"という列を持つ "item"というテーブルがあるとします。完全な価格に加えて、私は価格はすなわち、今Doctrine_Recordサブクラスに派生フィールドを追加する最も良い方法は何ですか?

class Item extends Doctrine_Record { 
    ... 
    public function getMonthlyPrice() { 
    return $this->price/12; 
    } 
} 

が、私は毎月の価格のようなアイテムの行為を持っているしたいと言うだけで別の列ではなく、ある、12ヶ月にまたがって取得したいのですが例えば、

$m = Doctrine_Core::getTable("Item")->find(1); 
echo $m->price; //prints 120 
echo $m->monthlyPrice; //prints 10 

私の最初の本能は、__get()メソッドをオーバーライドすることです。 Doctrineでこれを行うためのより良い、またはより標準的な方法がありますか?


ボーナス質問:

は私が

var_dump($m->getData()) 

を行うとき、私はリグオブジェクトはので、私は

array 
    'price' => 120 
    'monthlyPrice' => 10 

ていることがわかりますいくつかの非常に巧妙な方法はありますかなりNIになりますfty。

答えて

0

をブライアンは、あなたがフィルタでこれを行うことができると言いましたが、私はあなたが探しているものに近いと思い、別の方法があるので:それはあなたが必要なものを達成可能性があるようですが、これが聞こえますd DoctrineのATTR_AUTO_ACCESSOR_OVERRIDE機能を有効にする必要があります。つまり、あなたのプロパティに一致するget *およびset *形式のメソッドが自動的に呼び出されます。ここでは例です:あなたの質問の後半部分に関しては

class Example extends Doctrine_Record { 

    public function getFoo() { 
     return 'foo'; 
    } 
} 

Doctrine_Manager::getInstance()->setAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE, true); 

$example = new Example(); 
echo $example->foo; 

、ではない私が見てきたこと - あなたの最善の策は、必要に応じて、あなたのモデルにメソッドをオーバーライドしたり、あなたのモデルということDoctrine_Recordのサブクラスを作成することですその機能を包括する単一のオーバーライドを持つ拡張します。

関連する問題