2011-12-14 5 views
0

私のスキーマを働いていません。リストビューでは、start_dateend_dateを含むすべてのフィールドのフィルタが表示されます。さて、問題は、これらの2つのフィルタが動作していないことです。例えばStart Dateの範囲を指定し、filterを押して、応答ページで、WebデバッグツールバーのSQL queriesタブを見ましたが、提供された制約に従ってクエリを制約する指示はありません。 Posterモデルはcreated_atフィールドがあり、するTimestampableあるとして、今symfonyのフィルターは

SET NAMES 'UTF8' 
0.00s, "doctrine" connection 

SELECT COUNT(*) AS num_results FROM poster p 
0.00s, "doctrine" connection 

SELECT s.id AS s__id, s.first_name AS s__first_name, s.last_name AS s__last_name, s.email_address AS s__email_address, s.username AS s__username, s.algorithm AS s__algorithm, s.salt AS s__salt, s.password AS s__password, s.is_active AS s__is_active, s.is_super_admin AS s__is_super_admin, s.last_login AS s__last_login, s.created_at AS s__created_at, s.updated_at AS s__updated_at FROM sf_guard_user s 
0.00s, "doctrine" connection 

SELECT p.id AS p__id, p.name AS p__name, p.enabled AS p__enabled, p.layout AS p__layout, p.created_at AS p__created_at, p.updated_at AS p__updated_at, p.slug AS p__slug FROM place p 
0.00s, "doctrine" connection 

SELECT p.id AS p__id, p.name AS p__name, p.filename AS p__filename, p.approved AS p__approved, p.start_date AS p__start_date, p.end_date AS p__end_date, p.user_id AS p__user_id, p.created_at AS p__created_at, p.updated_at AS p__updated_at, p.slug AS p__slug FROM poster p LIMIT 10 
0.00s, "doctrine" connection 

SELECT s.id AS s__id, s.first_name AS s__first_name, s.last_name AS s__last_name, s.email_address AS s__email_address, s.username AS s__username, s.algorithm AS s__algorithm, s.salt AS s__salt, s.password AS s__password, s.is_active AS s__is_active, s.is_super_admin AS s__is_super_admin, s.last_login AS s__last_login, s.created_at AS s__created_at, s.updated_at AS s__updated_at FROM sf_guard_user s WHERE (s.id = '2') LIMIT 1 

:私はちょうどこれを参照してください。このフィールドに範囲を指定して結果をフィルタリングしようとしましたが、今すぐ参照してください

SELECT COUNT(*) AS num_results FROM poster p WHERE p.created_at >= '2011-12-15 00:00:00' AND p.created_at <= '2011-12-24 23:59:59' 

これはsymfonyのバグですか?助けてください。

UPDATE:[OK]を、私は少し調査を行なったし、BasePosterFilter.class.phpには、対応するaddFieldNameColumnQuery機能が存在しないことがわかりました。もう一度、デフォルトのsymfonyの振る舞いですか、それともいくつかのバグですか?

答えて

0

symfonyはDoctrine(またはPropeladdFieldNameColumnCriteria)のための任意のaddFieldNameColumnQueryを作成しませんが、あなたはBaseMyModelFormFiltergetFields()に見るように、単にフィールドは「マッピング」トラフ自身のタイプ(数値、テキスト、ブール、日付、ForeignKeyの)、あります入力フィルタが使用されているときに適切なフィルタを割り当てます。代わりに

新しいフィールドを追加する場合、myfieldを言う、あなたは機能addMyfieldNameColumnQuery(またはaddMyfieldNameColumnCriteria)を作成する必要には、symfonyは右SQLフィルタを取得して追加することができます。

+0

私は 'ForeignKey'のフィールドを持っていますが、' Text'のように動作するようにしたいと思います。私は 'getFields'と対応するwidget/validatorSchemasを変更しました。 [documentation](http://www.symfony-project.org/api/1_4/sfFormFilterDoctrine)とそのソースに従って、 '%LIKE%'クエリを追加する必要がある 'addTextQuery'が呼び出されるはずです。実際に何が起こっているかは、クエリが追加されないか、 '='クエリが追加されることです。なぜそれが起こっているのですか? – prongs

+0

http://stackoverflow.com/questions/8503938/symfony-filter-change-behaviour-from-field-value-to-fieldlike-value/8504873にお返事することをお手伝いしました。 – macgyver