【问题标题】:OFFSET and FETCH NEXT aka LIMIT for SQL Server in Zend Framework 2Zend Framework 2 中 SQL Server 的 OFFSET 和 FETCH NEXT 又名 LIMIT
【发布时间】:2015-07-17 09:33:14
【问题描述】:

如何在 Zf2 逻辑中创建 OFFSET 和 FETCH NEXT?结果应该如下所示

    SELECT * FROM mytable
  ORDER BY id DESC
    OFFSET 100 ROWS
FETCH NEXT 10 ROWS ONLY

here 所述。 使用以下代码时

$select = $this->tableGateway->getSql()->select();
$select->order('id DESC');
$select->offset(100);
$select->limit(10);
$resultSet = $this->tableGateway->selectWith($select);

那么输出是

SELECT [mytable].* 
FROM  [mytable] 
ORDER BY [id] DESC 
LIMIT '10' OFFSET '100'

这不适用于 SQL Server。我需要的输出是上面的输出。

db.config.php 中的配置如下所示

'db_sql_server' => array(
        'driver'    => 'pdo',
        'dsn'       => 'dblib:host=myhost;dbname=mydatabase',
        'username'  => 'myusername',
        'password'  => 'mypasswort',
),

我在这里跳过了 mysql 的“db”配置。 并在 global.php 中

return array(
  'service_manager' => array(
    'factories' => array(
        /**
         * Adapter SQL Server
         */
        'Application\Db\AdapterSQLServer' => function($sm) {
            $config = $sm->get('Config');
            return new Adapter($config['db_sql_server']);
        },
    ),
  ),
)

我在 Module.php 中使用 Table Gateway 引用。

【问题讨论】:

  • 你安装正确了吗? SO Link | samsonasik
  • 是的,与 SQL Server 的连接有效。可以执行其他语句。问题只是 ZF2 将“偏移”和“限制”转换为例如 MySQL 语句,而不是如上所述的 SQL 服务器语句。
  • 您能否提供从select 到某种getResult 的配置和整个查询
  • 我更新了描述
  • 您的适配器是哪个实例? get_class($tableGateway->getAdapter())

标签: sql-server zend-framework2 limit offset


【解决方案1】:

我认为您需要更改“db_sql_server”配置数组中的驱动程序名称

'driver' => 'pdo'

'driver' => 'sqlsrv'

【讨论】:

  • 'sqlsrv' 仅适用于带有 DLL 的 Windows,但我使用的是带有 FreeTDS 的 Linux 系统。
  • 好吧,你将不得不实现一个自己的 FreeTds 适配器......或者试试这个:stackoverflow.com/a/15594853/1558846
猜你喜欢
  • 2020-10-02
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
相关资源
最近更新 更多