2010-05-29 92 views
2

我有具有從相關模型(由陽明海運外國關係中指定)填充的選擇列表中的用戶窗體類過濾器表單域,像這樣:的Symfony /原則 - 如何通過房地產相關模型

$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 但我不清楚適當的用法。

任何指導將有所幫助。謝謝! 丹

回答

1

最快的方法來做到這一點將與現有的代碼保持一致,但只是略微調整。

在您的模型中,實現一個方法,該方法僅返回所需記錄的查詢對象,但不包含​​。基本上,您在GetActiveReports()方法中創建的查詢對象(然後可以重構此方法以使用新方法)。

然後,在你的窗體類:

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

小部件應再使用指定的查詢對象檢索正確過濾記錄。

+0

感謝這工作得很好!夫婦跟隨ups,因爲我仍然在學習基本知識...... 1.查詢如何與模型一起工作?之前我猜想它基於相關模型計算出背後的查詢?而現在,因爲我正在定義一個查詢,它覆蓋了它?我可以查看的文檔上的任何提示解釋了模型和查詢屬性的工作方式? 2.仍然想知道如何使用FormFilters,因爲這似乎是最優雅的解決方案。關於表單過濾器的解釋以及它們如何使用的文檔上的任何提示? 謝謝! – Dan 2010-05-30 21:43:06

+0

很高興工作:-)快速回答:1)默認情況下,Doctrine只是檢索給定模型的所有記錄,如果你不指定查詢。如果你這樣做,它使用該查詢來檢索它。 2)我只在管理生成器模塊中使用的過濾器類,而不是其他地方 - docs有點稀疏,不幸的是:-( – richsage 2010-05-31 03:38:15