Symfony的过滤器不工作
问题描述:
我的架构:Symfony的过滤器不工作
Poster:
actAs:
Timestampable: ~
Sluggable:
fields:[name]
columns:
id:
type: integer(4)
autoincrement: true
primary: true
name:
type: string(255)
notnull: true
filename:
type: string(255)
notnull: true
approved:
type: boolean(1)
default: false
start_date:
type: date
notnull: true
end_date:
type: date
notnull: true
user_id:
type: integer(20)
default: 1
attributes:
export: all
validate: true
relations:
User:
class: sfGuardUser
local: user_id
foreign: id
type: one
foreignType: many
foreignAlias: Posters
我有doctrine:generate-admin
生成模块poster
。在列表视图中,我看到的所有领域,包括start_date
和end_date
过滤器。现在,问题是,这两个过滤器不能正常工作。例如我提供了一个范围Start Date
和压制filter
,在响应页面,我看到了网页调试工具的SQL queries
标签但我没有看到根据所提供的约束制约查询的任何指示。我刚看到这一点:
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
现在,随着Poster
模型Timestampable,有created_at
场。我试图给一个范围内这一领域过滤结果,并在查询选项卡,我现在看到
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:好吧,我做了一个小调查,发现存在BasePosterFilter.class.php
没有相应addFieldNameColumnQuery
功能。那么,是默认的symfony行为还是一些错误?
答
Symfony的不创造任何addFieldNameColumnQuery
为Doctrine
(或addFieldNameColumnCriteria
为Propel
),而只是字段“映射”波谷自己的类型(数字,文本,布尔,日期,ForeignKey的),因为你在BaseMyModelFormFilter
的getFields()
见类,在使用输入过滤器时分配正确的过滤器。
相反,如果添加了一个新的领域,说myfield
,你必须创建一个功能addMyfieldNameColumnQuery
(或addMyfieldNameColumnCriteria
),以允许Symfony的获得,并添加正确的SQL过滤器。
嗯,我有一个字段是一个`ForeignKey`,但我想它表现得像`Text`。我改变了`getFields`和相应的插件/ validatorSchemas。现在根据[documentation](http://www.symfony-project.org/api/1_4/sfFormFilterDoctrine)及其来源,应该调用addTextQuery,它应该添加一个`%LIKE%`查询。什么是实际发生的情况是要么不加查询或添加一个'='查询。为什么会发生? – prongs 2011-12-14 13:00:55