2016-06-21 7 views
0

を使用して、適切にクエリーを構築し、私は今、このようなクエリを持ってする方法:Yii2:私はYii2を使用しているクエリビルダ

$data = $modelClass::find()->select([ 
    'task_group.*', 
    'count' => 'COUNT(task.id)', 
    'processed_count' => 'SUM(CASE WHEN task.status=\''.Task::STATUS_PROCESSED.'\' THEN 1 ELSE 0 END)', 
    'unprocessed_count' => 'SUM(CASE WHEN task.status=\''.Task::STATUS_UNPROCESSED.'\' THEN 1 ELSE 0 END)', 
    'problem_count' => 'SUM(CASE WHEN task.status=\''.Task::STATUS_PROBLEM.'\' THEN 1 ELSE 0 END)']) 
     ->joinWith('tasks')   
     ->groupBy('task_group.id')->all(); 

しかし、私はそれを表現するYii2でいくつかのより良い方法がなければならないと思います。どのように正しく書き換えることができますか?たとえば、インライン・パラメータなし。

+0

うーんを。これは、あなたがそれを変換してはならないと思う1つのインスタンスです。これは、この形式でもっと読みやすくなります。 – topher

+0

このクエリで、Task :: STATUS_PROCESSEDおよび他のよく知られている定数のプレースホルダを使用できますか?私はYii2 DAOで見ましたが、クエリービルダーでは見えませんでした。 –

答えて

0

は今、私はそれは、このような方法で行うことができ、次を参照してください。

task.status=:status_processed 
... 
->addParams([':status_processed' => Task::STATUS_PROCESSED])