2017-03-08 25 views
1

有一个用symfony 1.4编写的旧项目Symfony 1.4 sfDoctrinePager:如何设置自定义SQL?

还有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; 
} 

它提供了以下错误:

Fatal error: __clone method called on non-object in ...

请帮助解决这个问题。

+0

'setQuery '接受'Doctrine_Query'参数(不是一个SQL字符串) – sglessard

回答

1

有货sfDoctrinePager类不能使用自定义SQL字符串。它只接受Doctrine_Query的实例(请参阅sfDoctrinePlugin sources)。

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

如果你真的需要使用自定义的SQL与UNION,只有这样,才能实现这一目标是实现自定义sfDoctrinePager实现,接受SQL,并假设你的目标数据库平台,某些SQL查询结构等

相关问题