Symfony 1.4 sfDoctrinePager:如何设置自定义SQL?

时间:2017-03-08 05:24:32

标签: php mysql pagination doctrine symfony1

有一个用symfony 1.4编写的旧项目

还有SQL无法使用Doctrine创建。例如,请考虑此测试SQL:

SELECT id,name FROM users
UNION ALL
SELECT id*10 as id,name FROM users

puvlic function getPager(){
$sql = "SELECT id,name FROM users
      UNION ALL
    SELECT id*10 as id,name FROM users";

$pager = new sfDoctrinePager('Users', 10);
    $pager->setQuery($sql);
    $pager->setPage(2);
    $pager->init();
    return $pager;
}

它出现以下错误:

  

致命错误:在...中的非对象上调用__clone方法

帮助解决问题。

1 个答案:

答案 0 :(得分:1)

对于库存sfDoctrinePager类,无法使用自定义SQL字符串。它只接受Doctrine_Query的实例(请参阅sfDoctrinePlugin sources)。

你应该构造一个Doctring_Query对象,它完全符合你的需要(由于UNION,这可能是不可能的)。它需要一个查询对象,因为寻呼机需要在执行它之前修改查询(添加LIMIT和OFFSET)以独立于平台的方式(例如,它与MySQL和MS-SQL不同)。

如果确实需要将自定义SQL与UNION一起使用,实现它的唯一方法是实现接受SQL的自定义sfDoctrinePager实现并假设您的目标数据库平台,某些SQL查询结构,等