Ошибка OFFSET в проекте Symfony и бэкэнде MS SQL - PullRequest
2 голосов
/ 27 апреля 2011

Я строю проект Symfony 1.4 с бэкэндом MS SQL.Я создал серверную часть с помощью генератора администратора, но при попытке загрузить модуль администратора я получаю эту ошибку:

OFFSET cannot be used in MS SQL without ORDER BY due to emulation reasons

Как мне решить эту проблему?

Приложение symfony работает наСжатие Debian под Apache 2.2.

Ответы [ 4 ]

1 голос
/ 17 февраля 2012

В моем случае ошибка исчезла, указав размер пейджера в явном виде:

list:
    max_per_page: 20

Редактировать: Это не было решением, у меня просто были некоторые параметры сортировки в сеансе, которые временно решили проблему.

Новое решение - определить сортировку по умолчанию. Я сделал это, переопределив действие index:

class organisationActions extends autoOrganisationActions
{
  public function executeIndex(sfWebRequest $request)
  {
    // sorting
    if ($request->getParameter('sort', 'created_at') && $this->isValidSortColumn($request->getParameter('sort', 'created_at')))
    {
      $this->setSort(array($request->getParameter('sort', 'created_at'), $request->getParameter('sort_type')));
    }

    // pager
    if ($request->getParameter('page'))
    {
      $this->setPage($request->getParameter('page'));
    }

    $this->pager = $this->getPager();
    $this->sort = $this->getSort();
  }
}

$ request-> getParameter ('sort' , 'creation_at' )

вместо

$ request-> getParameter ( 'род')

1 голос
/ 04 мая 2011

Я только что столкнулся с этой (или похожей) проблемой.Я получал это сообщение об ошибке и сузил его до проблемы с подкачкой в ​​Symfony.Если бы я убрал содержимое подкачки из действия компонента, я мог бы пройти мимо него.

Ответ оказался очень простым: просто закажите основной запрос (то есть запрос, к которому применяется пейджер).В моем случае это было добавление:

->orderBy('i.created_at DESC')

Надеюсь, это кому-нибудь поможет.

1 голос
/ 23 июня 2011

Просто к вашему сведению.Разбиение на административный генератор бэкэнда застревает на определенных страницах с помощью OFFSET n;в конце запроса доктрины.Решение состоит в том, чтобы очистить SESSION COOKIES.

Я продолжал получать пустые страницы в бэкэнде.Я проанализировал свои запросы mysql и увидел, что OFFSET 60 добавлялся к каждому запросу.Это произошло после того, как я удалил все записи из таблицы базы данных.

1 голос
/ 27 апреля 2011

Исходя из моего взгляда на Doctrine API, ПОДДЕРЖИВАЕТСЯ поддерживать эту функцию, но в некоторых версиях MS SQL она может быть повреждена.К сожалению, у меня больше нет MS SQL для экспериментов.

Если вы можете обойтись вообще без подкачки страниц, можно обойти это, отключив его, установив

  list:
    max_per_page: false 

в вашемфайл generator.yml для модулей, использующих admin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...