2011-01-19 73 views
4

想象一下,我有一個名爲「item」的表格,其中有一個名爲「price」的列。除了全價,我想獲得的價格跨越12個月傳播,即將派生字段添加到Doctrine_Record子類的最佳方式是什麼?

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

現在,說我想有項目的行爲就像每月價格只是另一列,而不是函數調用,例如,

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

我的第一個直覺是重寫__get()方法。在教義中有沒有更好或更標準的方法來做到這一點?


獎金的問題:

有一些非常聰明的辦法,我可以鑽機的對象,所以當我做

var_dump($m->getData()) 

我看到

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

會很漂亮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的子類,你的模型然後擴展它有一個覆蓋該功能的覆蓋。

相關問題