symfony项目和MS SQL后端的OFFSET错误

时间:2011-04-26 21:12:05

标签: sql-server symfony1

我正在使用MS SQL后端构建一个symfony 1.4项目。我使用管理生成器构建了一个后端,但是当我尝试加载管理模块时,我收到了这个错误:

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

如何解决此问题?

symfony应用程序在Apache 2.2下运行Debian squeeze。

4 个答案:

答案 0 :(得分:1)

基于我对Doctrine API的一瞥,支持此功能是支持的,但某些版本的MS SQL可能会被破坏。不幸的是,我不再需要MS SQL来进行实验。

如果您可以在不进行分页的情况下相处,则可以通过设置

来解决此问题
  list:
    max_per_page: false 
使用admin。

的模块的generator.yml文件中的

答案 1 :(得分:1)

我刚遇到这个(或类似的)问题。我收到了该错误消息,并将其缩小到Symfony中的分页问题。如果我从组件操作中取出分页内容,我可以通过它。

答案结果非常简单:只需订购主查询(即寻呼机应用的查询)。在我的情况下,它添加了这个:

->orderBy('i.created_at DESC')

希望这有助于某人。

答案 2 :(得分:1)

只是一个FYI。后端管理生成器分页使用OFFSET n卡在某些页面上;在一个学说查询的最后。解决方案是清除SESSION COOKIES。

我不断在后端获取空白页面。我分析了我的mysql查询,看到OFFSET 60被添加到每个查询中。这是在我从数据库表中删除了所有记录之后发生的。

答案 3 :(得分:1)

在我的情况下,通过明确设置寻呼机大小错误消失了:

list:
    max_per_page: 20

编辑:那不是解决方案,我只是在会话中有一些排序参数暂时解决了这个问题。

新解决方案是定义一个defalut排序。我是通过覆盖索引操作来完成的:

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','created_at'

而不是

  

$请求 - >的getParameter( '排序')