2017-03-08 22 views
1

symfony 1.4で書かれた古いプロジェクトがありますSymfony 1.4 sfDoctrinePager:カスタムSQLを設定するには?

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

それは次のエラーを与える:

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

ヘルプ問題を解決してください。

+0

'はsetQuery '' Doctrine_Query'パラメータをとります(SQL文字列ではありません) – sglessard

答えて

1

在庫ありsfDoctrinePagerクラスでは、カスタムSQL文字列を使用することはできません。 Doctrine_Queryのインスタンスのみを受け入れます(sfDoctrinePlugin sourcesを参照)。

必要なものを正確に実行するオブジェクトを作成する必要があります(UNIONのために可能ではない可能性があります)。プラットフォームに依存しない方法で(例えば、MySQLとMS-SQLでは異なる)、ページャはクエリを実行する前に(LIMITとOFFSETを追加するために)クエリを変更する必要があるため、クエリオブジェクトが必要です。

あなたが本当にUNIONでカスタムSQLを使用する必要がある場合は、それを達成する唯一の方法はSQLを受け入れ、あなたのターゲットDBプラットフォームを想定して、カスタムsfDoctrinePager実装、特定のSQLクエリ構造を実装することである、など

関連する問題