2011-10-12 1 views
0

Я делаю небольшие поправки к системе Symfony 1.4. Я не очень хорошо знаком с Symfony.Как фильтровать геттер «один-ко-многим»?

Модель Doctrine уже настроена с помощью гейтера «один на один», но мне нужно добавить фильтр. например, получение баров от 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()' может быть изменен, чтобы присоединяться только к Bars на Foos, которые относятся к типу X? – Tim