My schema:
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
I have a module poster generated by doctrine:generate-admin. In the list view, I see the filters for all the fields including start_date and end_date. Now, the problem is, that these two filters are not working as they should. e.g. I provided a range for Start Date and pressed filter, in the response page, I saw the SQL queries tab of the web debug toolbar but there I don’t see any indication for constraining the query according to the provided constraint. I just see this:
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
Now, as the Poster model is Timestampable, there is a created_at field. I tried to filter the results by giving a range to this field, and in the queries tab, I now see
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'
Is that a bug in symfony? Please help.
UPDATE: Ok, I did a little investigation and found that there is no corresponding addFieldNameColumnQuery function in BasePosterFilter.class.php. So again, is that default symfony behaviour or is that some bug?
Symfony doesn’t create any
addFieldNameColumnQueryforDoctrine(oraddFieldNameColumnCriteriaforPropel), but simply fields are “mapped” trough own types (Number, Text, Boolean, Date, ForeignKey), as you see ingetFields()of aBaseMyModelFormFilterclass, assigning the right filter when an input filter is used.Instead if you add a new field, say
myfield, you have to create a functionaddMyfieldNameColumnQuery(oraddMyfieldNameColumnCriteria) to allows Symfony to get and add the right sql filter.