【问题标题】:Symfony 1.4 sfDoctrinePager: How to set custom SQL?Symfony 1.4 sfDoctrinePager:如何设置自定义 SQL?
【发布时间】:2017-07-28 13:32:02
【问题描述】:

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

还有使用 Doctrine 无法创建的 SQL。例如,考虑以下测试 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 方法在...中的非对象上调用

请帮忙解决问题。

【问题讨论】:

  • setQuery 采用 Doctrine_Query 参数(不是 SQL 字符串)

标签: php mysql pagination doctrine symfony1


【解决方案1】:

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

您应该构造一个 Doctring_Query 对象,该对象完全符合您的需要(这可能因为 UNION 而无法实现)。它需要一个查询对象,因为分页器需要在以与平台无关的方式执行查询之前修改查询(添加 LIMIT 和 OFFSET)(例如,在 MySQL 与 MS-SQL 上有所不同)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多