具有默认表排序的Symfony自定义表单过滤器

时间:2011-03-24 17:05:46

标签: forms symfony1 filter doctrine

我有这样的设置:司机,季节,团队。有许多团队的司机和许多有季节的人。请注意,没有从团队到季节的直接链接。

我有一个团队过滤表格。我想要一个季节选择小部件,以便我可以过滤到具有与所选季节相关联的驱动程序的小组。我在TeamFormFilter.class中添加了这个查询代码:

public function addSeasonsListColumnQuery($q, $element, $value)
{
  if ($value)
  {
    $alias = $q->getRootAlias();
    $q
      ->innerJoin($alias . '.Drivers d')
      ->innerJoin('d.Seasons s')
      ->addWhere('s.id = ?', $value)
      ->groupBy($alias . '.id');
    return $q;
  }
}

这样可以自行工作(没有下面的内容)。我还使用此方法在Seasons表(在SeasonTable.class中)设置了默认排序顺序:

public function __construct($name, Doctrine_Connection $conn, $initDefinition = false)
{
  parent::__construct($name, $conn, $initDefinition);
  $this->_options['orderBy'] = 'start_date DESC';
}

这也可以自行运行(没有上述内容)。问题来自使用这两个,这给了我这个错误:

Column not found: 1054 Unknown column 's2.start_date' in 'order clause'

查询部分:

.. FROM teams t 
   INNER JOIN drivers d ON t.id = d.team_id AND (d.deleted_at IS NULL) 
   INNER JOIN seasons_drivers s2 ON (d.id = s2.driver_id) 
   INNER JOIN seasons s ON s.id = s2.season_id
....
   ORDER BY t.name ASC, d.driver_number ASC, s.start_date DESC, s2.start_date DESC

start_date的排序也已应用于链接表(seasons_drivers)!?!

经过几个小时的挖掘代码库,我得出结论:a)这是一个学说错误或b)从根本上说我不能像我一样在表格上使用默认顺序。

有任何想法或建议吗?

由于

汤姆

1 个答案:

答案 0 :(得分:0)

我会试试这个:

public function addSeasonsListColumnQuery($q, $element, $value)
{
  if ($value)
  {
    $alias = $q->getRootAlias();
    $q
      ->innerJoin($alias . '.Drivers d')
      ->innerJoin('d.Seasons s')
      ->addWhere('s.id = ?', $value)
      ->groupBy($alias . '.id')
      ->orderBy('s.start_date DESC');
    return $q;
  }
}