Php Doctrine2通过不在ZF2下工作实现MS服务器分页和排序
我有一个按发布日期排序的新闻列表,我想给它分页。我正在Zend Framework 2项目中使用Doctrine 2.5。这是我的实体: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
<?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