2017-06-26 6 views
1

私のMySQLデータベースには多くのクエリがあります。 Thteのクエリはうまく動作します。クエリからSET @ VARIABLEがある場合、SQLDataProviderを使用できません

SET @cleaning = 'cleaning'; 
     SET @one_bar = 'one bar'; 
     SET @test_periodic = 'test_periodic'; 
     SET @repairs = 'repair'; 

     SELECT ir.id, ir.no_surat, @cleaning as tagihan,tc.`level`, tc.cleaning as nominal FROM ydepotras_estimator.repair_estimate re 
     LEFT JOIN ydepotras_estimator.inspection_report ir 
     ON re.inspection_id = ir.id 
     INNER JOIN ydepotras_finance.tagihan_cleaning tc 
     ON re.id = tc.repair_estimate_id 

     UNION ALL 

     SELECT ir.id, ir.no_surat, @one_bar as tagihan, tob.`level`, tob.one_bar as nominal 
      FROM ydepotras_estimator.repair_estimate re 
     LEFT JOIN ydepotras_estimator.inspection_report ir 
     ON re.inspection_id = ir.id 
     INNER JOIN ydepotras_finance.tagihan_one_bar tob 
     ON re.id = tob.repair_estimate_id 
     UNION ALL 

     SELECT ir.id, ir.no_surat, @test_periodic as tagihan, 
       ttp.`level`, IFNULL(ttp.years2,ttp.years5) as nominal 
      FROM ydepotras_estimator.repair_estimate re 
     LEFT JOIN ydepotras_estimator.inspection_report ir 
     ON re.inspection_id = ir.id 
     INNER JOIN ydepotras_finance.tagihan_test_periodic ttp 
     ON re.id = ttp.repair_estimate_id 
     GROUP by ttp.id 
     UNION ALL 
     SELECT ir.id, ir.no_surat, @repairs as tagihan, 
       tr.`level`, tr.`repair` as nominal 
      FROM ydepotras_estimator.repair_estimate re 
     LEFT JOIN ydepotras_estimator.inspection_report ir 
     ON re.inspection_id = ir.id 
     INNER JOIN ydepotras_finance.tagihan_repair tr 
     ON re.id = tr.repair_estimate_id 
     ORDER BY no_surat 

ここでYii2がオンになります。 このクエリは$ dataProviderになり、ActiveRecordを使用すると非常に複雑になります。

私はこのようなSQLDataProviderを使用することを好む:

$query = 'The query from above' 

$dataProvider = new SqlDataProvider([ 
     'sql' => $query, 
     'totalCount' => 100, 
    ]); 

return $dataProvider->getModels(); 

しかし、それは私を与える:

Database Exception – yii\db\Exception 
    SQLSTATE[HY000]: General error 

答えて

1

あなたはdinamicallyあなたは、値を直接使用することができ、あなたのmysql VARに値をdon'assign事実を行います代わりに、VARの

SELECT ir.id, ir.no_surat, 'cleaning' as tagihan,tc.`level`, tc.cleaning as nominal FROM ydepotras_estimator.repair_estimate re 
    LEFT JOIN ydepotras_estimator.inspection_report ir 
    ON re.inspection_id = ir.id 
    INNER JOIN ydepotras_finance.tagihan_cleaning tc 
    ON re.id = tc.repair_estimate_id 

または使用結合のparam

$params = [':cleaning' => 'cleaning]; 
    $sql= Yii::$app->db->createCommand(" 
      SELECT ir.id, ir.no_surat, :cleaning as tagihan,tc.`level`, tc.cleaning as nominal FROM ydepotras_estimator.repair_estimate re 
      LEFT JOIN ydepotras_estimator.inspection_report ir 
      ON re.inspection_id = ir.id 
      INNER JOIN ydepotras_finance.tagihan_cleaning tc 
      ON re.id = tc.repair_estimate_id) 
      ->bindValues($params); 
+0

ありがとうございます。どうぞ、検索の扱い方は? –

+0

このリンクでは、activeDataProviderによるフィルタ(検索)と注文の提案を見つけることができます。 – scaisEdge

+0

どのようなリンクですか? 。 Btw、ありがとう –

関連する問題