Пользовательские фильтры форм Symfony с сортировкой таблиц по умолчанию

У меня такая настройка: «Пилоты», «Сезоны», «Команды». Многие водители - многие с командами и многие-многие с сезонами. Обратите внимание, что между командами и сезонами нет прямой ссылки.

У меня есть форма фильтра для команд. Мне нужен виджет выбора сезона, чтобы я мог фильтровать команды, у которых есть драйверы, связанные с выбранным сезоном. Я добавил этот код запроса в 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;
  }
}

Это отлично работает само по себе (без нижеприведенного). У меня также есть порядок сортировки по умолчанию, установленный в таблице сезонов (в 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)!?!

После нескольких часов копания в кодовой базе я пришел к выводу, что либо а) это ошибка доктрины, либо б) принципиально я не могу использовать порядок по умолчанию в таблице так, как я.

Есть идеи или предложения?

Спасибо

Том


person lopsided    schedule 24.03.2011    source источник


Ответы (1)


Я бы попробовал это:

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;
  }
}
person Imi Borbas    schedule 25.03.2011
comment
Я попытался добавить эту строку, но получил ту же ошибку, что и раньше. Спасибо за предложение, хотя Ими! - person lopsided; 25.03.2011
comment
Как насчет того, чтобы удалить этот порядок по умолчанию, а затем попробовать этот подход? - person Imi Borbas; 25.03.2011
comment
Все это работает в любом случае без упорядочивания по умолчанию. Проблема в том, что мне нужен порядок по умолчанию для общего использования сезонов, меня раздражает то, что мне, возможно, придется пойти на компромисс и добавить его во все места, где я вытаскиваю сезоны. Приветствую. Том - person lopsided; 25.03.2011