Как отфильтровать геттер один-ко-многим? - PullRequest
0 голосов
/ 12 октября 2011

Я делаю небольшие изменения в системе Symfony 1.4. Я не очень знаком с Symfony.

Модель Doctrine уже настроена с геттером «один ко многим», но мне нужно добавить фильтр. например, получая Bars из Foo с Foo->getBars(), я хочу передать параметр getBars для фильтрации только X-типа бара, т.е. Foo->getBars('X');

Базовый класс BaseFoo уже имеет это в методе setUp

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

Извините за довольно абстрактный пример, но реальные имена объектов могли бы иметь меньше смысла.

Ответы [ 2 ]

0 голосов
/ 12 октября 2011

К тому времени, когда вы звоните $foo->getBars(), $ foo уже увлажнен. В этот момент вы можете переопределить public function getBars().

Однако, почему бы вам не сузить свой набор результатов, изменив вместо этого свой запрос?

0 голосов
/ 12 октября 2011

Вам нужно создать новый запрос для этого ....

В файле /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();
}

, которая будет возвращать объект Doctrine Hydrated, который вытребуют ... его называют

Foo->getBarsWithX('x);

Надеюсь, что помогает!

...