2011-12-01 70 views
0

我是一個嘗試使用symfony 1.4創建簡單(理論上)CRUD應用程序的新手。我試圖在我的索引頁上使用過濾器,以便用戶可以選擇想要查看的記錄而不是整個列表。Symfony 1.4格式 - 外鍵過濾失敗驗證

我按照我在這裏找到的說明http://www.michelsalib.com/2010/10/how-to-use-filters-on-custom-fields(雖然我沒有使用自定義字段,只有在表格中出現並在Base--FormFilter類中列出的字段)。這適用於除了外鍵之外的所有字段。

當我嘗試過濾這些值時,驗證失敗。 濾波器窗口小部件是:

new sfWidgetFormDoctrineChoice(array(
    'model' => $this->getRelatedModelName('EatLocations'), 
    'add_empty' => true)) 

和驗證是:

new sfValidatorDoctrineChoice(array(
    'required' => false, 
    'model' => $this->getRelatedModelName('EatLocations'), 
    'column' => 'loc_abbrev') 

我認爲問題是,驗證器被指向錯誤的列,但是,當我設置「列」 =>」 'location_id'(外鍵指向的列)出現此錯誤: 您必須定義一個「addEaUnitColumnQuery」方法才能使用「ea_unit」字段進行篩選。

我已經看到了一些如何編寫這種方法的例子,但他們似乎過於複雜,我不知道如何將這個應用到我的表。有誰知道是否有更簡單的方法來解決這個問題?

+0

你爲什麼要指定「列」選項? – greg0ire

回答

0

解決:

Why are you specifying the 'column' option? – greg0ire

在基類中的自動生成的代碼所指定的列,所以我不得不將其覆蓋。

我通過驗證爲「LOCATION_ID」設置列解決了萬阿英,蔣達清,然後 編寫以下功能...

public function addEaUnitColumnQuery($query, $field, $values) 
    { 
    if ($values['ea_unit']!= NULL) { 
     $query->addWhere('ea_unit_id = ?', $values['ea_unit']); 
    } 
    }