2011-10-12 20 views
0

我正在對Symfony 1.4系統進行小修改。我對Symfony不是很熟悉。如何過濾一對多的getter?

該Doctrine模型已經建立了一對多的getter,但我需要添加一個過濾器。例如,正從一個Foo酒吧與Foo->getBars(),我想通過一個參數來getBars僅過濾欄的X型,即Foo->getBars('X');

基類BaseFoo已經在setUp方法具有這到位

$this->hasMany('Foo_Bars as Bars', array(
    'local' => 'foo_id', 
    'foreign' => 'foo_id' 
)); 

道歉的相當抽象的例子,但真正的對象名稱可能會少一些意義。

回答

0

你需要創建一個新的查詢....

/lib/model/doctrine/foo.class.php文件中創建一個新的功能:

public function getBarsWithX($x) 
{ 
    return Doctrine_Core::getTable('Foo')->createQuery('f') 
     ->innerjoin('f.Bar b') 
     ->where('f.id = ?',self::_get('id')) 
     ->andWhere('b.x = ?',$x)   // Change this line to match the field name 
     ->execute(); 
} 

,將返回學說脫水對象您需要...它通過

Foo->getBarsWithX('x);

希望幫助叫!

0

當您撥打$foo->getBars()時,$ foo已經水化。此時,您可以覆蓋public function getBars()

但是,爲什麼不通過修改查詢來縮小結果集呢?

+0

P.S .: 2小時沒有答案!確實令人失望! ;) – Burgi

+0

謝謝,雖然我不太關注你對查詢的觀點。你是否暗示我的原始'$ model-> getFoos()'查詢可以改變爲僅將Bar連接到類型爲X的Foos? – Tim