Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Doctrine2通过不在ZF2下工作实现MS服务器分页和排序_Php_Sql Server_Doctrine Orm_Pagination_Zend Framework2 - Fatal编程技术网

Php Doctrine2通过不在ZF2下工作实现MS服务器分页和排序

Php Doctrine2通过不在ZF2下工作实现MS服务器分页和排序,php,sql-server,doctrine-orm,pagination,zend-framework2,Php,Sql Server,Doctrine Orm,Pagination,Zend Framework2,我有一个按发布日期排序的新闻列表,我想给它分页。我正在Zend Framework 2项目中使用Doctrine 2.5。这是我的实体: <?php namespace BuscadorJuridico\Entity; use Doctrine\ORM\Mapping as ORM; use Zend\Form\Annotation as Form; /** * Class News * @package BuscadorJuridico\Entity * * @ORM\Ta

我有一个按发布日期排序的新闻列表,我想给它分页。我正在Zend Framework 2项目中使用Doctrine 2.5。这是我的实体:

<?php

namespace BuscadorJuridico\Entity;

use Doctrine\ORM\Mapping as ORM;
use Zend\Form\Annotation as Form;

/**
 * Class News
 * @package BuscadorJuridico\Entity
 *
 * @ORM\Table(name="news")
 * @ORM\Entity
 */
class News
{

    /**
     * @var int
     *
     * @ORM\Column(name="news_id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     *
     */
    protected $id;

    /**
     * @var string
     *
     * @ORM\Column(name="news_title", type="string", length=200, nullable=false)
     */
    public $title;

    /**
     * @var string
     *
     * @ORM\Column(name="news_body", type="blob", nullable=false)
     *
     */
    public $body;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="news_date_published", type="date", nullable=true)
     *
     */
    protected $datePublished;

    /**
     * @var bool
     *
     * @ORM\Column(name="news_status", type="boolean", nullable=false)
     *
     */
    public $published;

}
但当我转到列表时,我得到了错误:

SQLSTATE [42000, 8120]: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Column 'dctrn_result.news_date_published_3' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
当我删除
->orderBy('news.datePublished','desc')
行时,我得到了列表,但自然没有排序。这是条令生成的SQL的一部分:

SELECT DISTINCT 
  news_id_0, 
  MIN(sclr_5) AS dctrn_minrownum,
  ROW_NUMBER() OVER (ORDER BY news_date_published_3 DESC) AS doctrine_rownum 
  FROM (
    SELECT n0_.news_id AS news_id_0,
    n0_.news_title AS news_title_1,
    n0_.news_body AS news_body_2,
    n0_.news_date_published AS news_date_published_3,
    n0_.news_status AS news_status_4,
    ROW_NUMBER() OVER(ORDER BY n0_.news_date_published DESC) AS sclr_5 
    FROM news n0_ 
    WHERE n0_.news_status = 1)
  dctrn_result 
  GROUP BY news_id_0

使用MySQL,代码可以正常工作。谢谢你的帮助

实际上,我有一个公共关系可以解决这个问题。我看看能不能把这件事讲清楚


我使用了来自wschalle的PR,并创建了自己的Mssql驱动程序,包括修复程序,也许它对您有所帮助

SELECT DISTINCT 
  news_id_0, 
  MIN(sclr_5) AS dctrn_minrownum,
  ROW_NUMBER() OVER (ORDER BY news_date_published_3 DESC) AS doctrine_rownum 
  FROM (
    SELECT n0_.news_id AS news_id_0,
    n0_.news_title AS news_title_1,
    n0_.news_body AS news_body_2,
    n0_.news_date_published AS news_date_published_3,
    n0_.news_status AS news_status_4,
    ROW_NUMBER() OVER(ORDER BY n0_.news_date_published DESC) AS sclr_5 
    FROM news n0_ 
    WHERE n0_.news_status = 1)
  dctrn_result 
  GROUP BY news_id_0