2011-10-12 6 views
0

私はSymfony 1.4システムのマイナーな修正を行っています。私はSymfonyをあまりよく知らない。1対多ゲッタをフィルタリングする方法は?

Doctrineモデルはすでに1対多ゲッタで設定されていますが、フィルタを追加する必要があります。例えば、Foo->getBars()ではFooからバーを取得し、私は、バーの唯一のXタイプをフィルタリングするgetBarsにパラメータを渡したいつまりFoo->getBars('X');基底クラスBaseFooはすでにsetUp方法で所定の位置にこれを持っている

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

かなり抽象的な例のためにお詫びしますが、実際のオブジェクト名はおそらくあまり意味がありません。 /lib/model/doctrine/foo.class.phpファイルで

答えて

0

あなたはそのための新しいクエリを作成する必要があります....

新しい関数を作成:

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 .: 2時間無回答!それは本当に残念です! ;) – Burgi

+0

ありがとう、私はかなり質問についてのあなたの点に従っていません。私のオリジナルの '$ model-> getFoos()'クエリは、X型のFoosにBarsを結合するだけに変更できることを示唆していますか? – Tim