Фильтр Symfony не работает - PullRequest
       32

Фильтр Symfony не работает

0 голосов
/ 14 декабря 2011

Моя схема:

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

У меня есть модуль poster, сгенерированный doctrine:generate-admin.В виде списка я вижу фильтры для всех полей, включая 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 имеет метку времени, есть поле 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?Пожалуйста, помогите.

ОБНОВЛЕНИЕ : Хорошо, я провел небольшое расследование и обнаружил, что в BasePosterFilter.class.php нет соответствующей функции addFieldNameColumnQuery.Итак, опять же, это поведение Symfony по умолчанию или это какая-то ошибка?

1 Ответ

0 голосов
/ 14 декабря 2011

Symfony не создает никаких addFieldNameColumnQuery для Doctrine (или addFieldNameColumnCriteria для Propel), но просто поля «отображаются» через собственные типы (Number, Text, Boolean, Date, ForeignKey), какВы видите в getFields() класса BaseMyModelFormFilter назначение правильного фильтра при использовании входного фильтра.

Вместо этого, если вы добавляете новое поле, скажем myfield, вам нужно создать функцию addMyfieldNameColumnQuery (или addMyfieldNameColumnCriteria), чтобы Symfony мог получить и добавить правильный SQL-фильтр.

...