フリーフォーム テキストと選択フィールドの 2 つのフィールドを持つフォーム フィルターを作成するように依頼されました。選択の値は、テキストの値を処理する方法を決定し、条件に変換されます。
いずれかのフィールドにカスタムの addXXXColumnCriteria を作成できますが、この関数内から他のフィールドにアクセスするにはどうすればよいですか?
フリーフォーム テキストと選択フィールドの 2 つのフィールドを持つフォーム フィルターを作成するように依頼されました。選択の値は、テキストの値を処理する方法を決定し、条件に変換されます。
いずれかのフィールドにカスタムの addXXXColumnCriteria を作成できますが、この関数内から他のフィールドにアクセスするにはどうすればよいですか?
de addXXXColumnCriteriaを使用せずに、FormFilter doBuildCriteria(Propel)またはdoBuildQuery(Doctrine)メソッドを上書きすることをお勧めします。私はPropelを使ったことがありませんが、Doctrineと同じくらいうまくいくと思います。
例えば:
class yourPropelFormFilter extends anyKindOfSfFormFilterPropel {
public function doBuildCriteria(array $values) {
$criteria = parent::doBuildCriteria($values);
// ... change the criteria behaviour with the $values array (do some print_r to $values to see how the data array is formatted)
return $criteria;
}
}
Doctrineの場合(getRootAliasクエリメソッドを使用することを忘れないでください):
class yourDoctrineFormFilter extends anyKindOfSfFormFilterDoctrine {
public function doBuildQuery(array $values) {
$q = parent::doBuildQuery($values);
$rootAlias = $q->getRootAlias();
if(...) {
$q->innerJoin($rootAlias.'.RelationX rx')
->addWhere('rx.value = ?',$values['...']);
}
return $q;
}
}
基準/クエリで変更されたオブジェクトを返すことを忘れないでください!