Форма Symfony 1.4 - фильтрация полей внешнего ключа не проходит проверку - PullRequest
0 голосов
/ 01 декабря 2011

Я новичок, пытающийся создать простое (теоретически) приложение 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')

Я думал, что проблема была в том, что валидатор указывал на неправильный столбец, но когда я установил 'column' => '' location_id '(столбец, на который указывает внешний ключ), я получил эту ошибку: Вы должны определить метод "addEaUnitColumnQuery", чтобы иметь возможность фильтрации с полем "ea_unit".

Я видел несколько примеров того, как написать этот метод, но они кажутся слишком сложными, и я не уверен, как применить это к моей таблице. Кто-нибудь знает, есть ли более простой способ решить эту проблему?

1 Ответ

0 голосов
/ 05 декабря 2011

решено:

Почему вы указали опцию «столбец»?- greg0ire

В автоматически сгенерированном коде в базовом классе указан столбец, поэтому мне пришлось его переопределить.

Я решил проблему, установив в столбце валидатора значениеlocation_id 'и затем пишем следующую функцию ...

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