Symfony1 Symfony/条令-如何在相关模型中按属性筛选表单字段

Symfony1 Symfony/条令-如何在相关模型中按属性筛选表单字段,symfony1,doctrine,symfony-forms,Symfony1,Doctrine,Symfony Forms,我有一个UserForm类,它有一个从相关模型(由yml中的外部关系指定)填充的选择列表,如下所示: 我希望通过其中一个报告字段“active”来过滤来自此关系的报告对象,以便表单中只显示active=1的报告 我有一个方法ReportTable::GetActiveReports(),它执行适当的查询并返回过滤后的报告。因此,一个选项是用该函数的结果填充小部件。有什么语法提示吗 在我看来,更干净的方法是使用UserFormFilter类按active=1过滤报告。不幸的是,我找不到任何关于如何

我有一个UserForm类,它有一个从相关模型(由yml中的外部关系指定)填充的选择列表,如下所示:

我希望通过其中一个报告字段“active”来过滤来自此关系的报告对象,以便表单中只显示active=1的报告

我有一个方法ReportTable::GetActiveReports(),它执行适当的查询并返回过滤后的报告。因此,一个选项是用该函数的结果填充小部件。有什么语法提示吗

在我看来,更干净的方法是使用UserFormFilter类按active=1过滤报告。不幸的是,我找不到任何关于如何使用表单过滤器的文档(或者它们是什么),所以这可能不是正确的解决方案。表单筛选器是否适合此工作? 似乎我应该使用这里定义的条令\记录\过滤器\标准类: 但我不清楚正确的用法

任何指导都会有帮助。谢谢
Dan

最快的方法是保持现有代码,但只是稍微调整一下

在您的模型中,实现一个方法,该方法只返回所需记录的查询对象,但不执行它。基本上是在
GetActiveReports()
方法中创建的查询对象(然后可以重构此方法以使用新方法)

然后,在您的表单类中:

$queryObject = Doctrine::getTable("Report")->GetActiveReportsQuery();
$this->setWidget('report_id',
  new sfWidgetFormDoctrineChoice(array(
    'model' => $this->getRelatedModelName('Report'),
    'query' => $queryObject)
  )
);

然后,小部件应该使用指定的查询对象来检索正确的过滤记录。

谢谢,这非常有效!几次跟进,因为我还在学习基础知识。。。1.查询如何与模型一起工作?在我猜它根据相关模型找出幕后的查询之前?既然我正在定义一个查询,它会覆盖它吗?关于文档的任何提示,我都可以看到,这些提示解释了模型和查询属性是如何工作的?2.仍然想知道如何使用FormFilters,因为这似乎是最优雅的解决方案。有没有关于文档的提示以及表单过滤器的说明以及它们是如何使用的?谢谢很高兴它成功了:-)快速回答:1)默认情况下,如果不指定查询,Doctrine只检索给定模型的所有记录。如果您这样做,它将使用该查询来检索它。2) 我只在admin generator模块中使用过filter类,在其他地方没有使用过——不幸的是,文档有点稀疏:-(
$queryObject = Doctrine::getTable("Report")->GetActiveReportsQuery();
$this->setWidget('report_id',
  new sfWidgetFormDoctrineChoice(array(
    'model' => $this->getRelatedModelName('Report'),
    'query' => $queryObject)
  )
);