检索创建Doctrine集合的查询

时间:2010-07-01 21:45:52

标签: php reflection orm doctrine introspection

我有一个Doctrine_Collection对象是使用类似的代码创建的。

$collection = Doctrine_Query::create()
->from('FooBazBar')
->where('widget_id = ?',$some_var)
->execute();

如果没有在某处写下来,是否可以检索用于创建集合的where子句?

也就是说,我希望能够像

这样的东西
$collection->getWhereClauses(); //fake method

以某种形式取回where子句。

一个明确的“不,这不是通过API公开”并附带解释是一个非常合理的答案。

2 个答案:

答案 0 :(得分:1)

不,这不是通过API公开的。

更严重的是,您无法检索生成Doctrine_Collection的查询。执行此操作的简单方法是在表中创建方法,例如:

//FooTable.php
public function findByWidgetQuery()
{
return $this->createQuery('foo')
  ->where('foo.baz = ?', 'bar');
}

然后你可以像这样使用getDqlPart():

$where = Doctrine_Core::getTable('Foo')
->findByWidgetQuery()
->getDqlPart('where');

那应该给你一个像这样的数组:

array(2) { [0] => string(8) 'widget = ?' [1] => string(10) 'widget = ?' }

请注意,它不会返回传递给where()子句的实际值。要做到这一点,你需要使用Doctrine_Query :: getParams()或Doctrine_Query :: getFlattenedParams()

您可以在Doctrine API

中找到所有内容

答案 1 :(得分:-1)