Например есть табличка с заказами Order, табличка с товарами Product и связующая табличка OrderProduct. В backend необходимо добавить возможность фильтрации по id заказа (странно что symfony сама не добавляет в фильтр id) и по названию товара в заказе.
Первым делом изменяем OrderFormFilter:
class OrderFormFilter extends BaseOrderFormFilter
{
public function configure()
{
$this->widgetSchema['id'] = new sfWidgetFormInput();
$this->validatorSchema['id'] = new sfValidatorInteger(array('required' => false));
$this->widgetSchema['prodname'] = new sfWidgetFormInput();
$this->validatorSchema['prodname'] = new sfValidatorString(array('required' => false));
}
public function getFields()
{
$fields = parent::getFields();
$fields['id'] = 'Number';
$fields['prodname'] = 'Text';
return $fields;
}
public function addIdColumnQuery(Doctrine_Query $query, $field, $value)
{
$query->andWhere('r.id = ? ', $value);
}
public function addProdnameColumnQuery(Doctrine_Query $query, $field, $value)
{
$query->leftJoin('r.Products p')->andWhere('p.name LIKE ?', "%$value%");
}
}
Теперь нужно добавить новые поля в generator.yml:
filter:
display: [ id, prodname, ..... ]