如何过滤一对多的吸气剂?

时间:2011-10-12 11:15:03

标签: php symfony1 doctrine symfony-1.4

我正在对Symfony 1.4系统进行细微修改。我对Symfony不是很熟悉。

Doctrine模型已经设置了一对多的getter,但我需要添加一个过滤器。例如,使用Foo->getBars()从Foo获取Bars,我想将参数传递给getBars以仅过滤X类型的Bar,即Foo->getBars('X');

基类BaseFoo已经在setUp方法

中实现了这一点
$this->hasMany('Foo_Bars as Bars', array(
    'local'   => 'foo_id',
    'foreign' => 'foo_id'
));

为相当抽象的例子道歉,但真实的对象名称可能没有多大意义。

2 个答案:

答案 0 :(得分: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();
}

这将返回您需要的Doctrine Hydrated对象......由

调用

Foo->getBarsWithX('x);

希望有所帮助!

答案 1 :(得分:0)

当你致电$foo->getBars()时,$ foo已经水合了。此时,您可以覆盖public function getBars()

但是,为什么不通过修改查询来缩小结果集呢?