我有一个UserForm类,它有一个从相关模型填充的选择列表(由yml中的外来关系指定),如下所示:
$this->setWidget('report_id', new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('Report'))));
我想通过其中一个“报告”字段过滤来自此关系的“报告”对象,“活动”,以便只在表单中显示带有active = 1的报告。
我有一个方法,ReportTable :: GetActiveReports(),它执行适当的查询并返回过滤的报告。因此,一个选项是使用该函数的结果填充Widget。有关语法的任何提示吗?
在我看来,更清晰的方法是使用UserFormFilter类通过active = 1过滤报告。不幸的是我找不到任何关于如何使用表单过滤器的文档(或者它们真的是什么),所以这可能不是正确的解决方案。表单过滤器是否适合此工作? 看来我应该使用这里定义的Doctrine_Record_Filter_Standard类:http://www.doctrine-project.org/api/orm/1.2/doctrine/doctrine_record_filter_standard.html 但我不清楚它的适当用法。
任何指导都会有所帮助。谢谢! 丹
答案 0 :(得分:1)
最快的方法就是保留现有的代码,只需稍微调整一下。
在您的模型中,实现一个方法,该方法只返回所需记录的查询对象,但没有execute()
。基本上是您在GetActiveReports()
方法中创建的查询对象(然后您可以重构此方法以使用新方法)。
然后,在您的表单类中:
$queryObject = Doctrine::getTable("Report")->GetActiveReportsQuery();
$this->setWidget('report_id',
new sfWidgetFormDoctrineChoice(array(
'model' => $this->getRelatedModelName('Report'),
'query' => $queryObject)
)
);
然后,窗口小部件应使用指定的查询对象来检索正确的过滤记录。