2013-08-26 36 views
2

我試圖創建將帶參數的mysql UPDATE查詢。另外,如果字段不爲空,我想追加到字段的末尾。爲此我使用CASE語句。 這裏是我的學說(從硅石)查詢:如何在Laravel 4中使用參數和CASE語句進行更新查詢

$query = "UPDATE table SET filed = (
CASE WHEN field = '' 
THEN :param1 
ELSE concat(field, :param1) 
END) 
WHERE id=:param2"; 
$app['db']['test_db']->executeUpdate($sql, array('param1' => $user_text, 'param2' => $selected_id)); 

現在我想將它轉換爲Fluent或原始查詢,所以我可以在Laravel 4

這裏使用它是我的代碼:

$param1 = "String..."; // user string 
$param2 = 45; // id 
DB:connection('test_db')->statement("UPDATE table SET field =(
case 
    WHEN field='' 
    THEN $param1 
    ELSE concat(field, $param1) 
END) 
WHERE id=$param2"); 

當我在Laravel執行這個查詢我看到

語法錯誤或訪問衝突:1064

任何幫助將不勝感激。

回答

4

嘗試使用raw()運行它:

DB::statement(
    DB::raw(
       "UPDATE table SET field = 
        (
         CASE 
          WHEN field='' 
          THEN ? 
          ELSE concat(field, ?) 
         END 
        ) 
        WHERE id=?" 
    ), 

    array($param1, $param1, $param2) 
); 
+0

當$參數1文本較長此解決方案不起作用,並有新的生產線等。它不逃避它。 – BlueNile

+0

只需編輯以支持參數(綁定)。 –

+0

謝謝,這一個工作。我想我嘗試了所有其他組合與原始聲明。我甚至試圖獲得PDO實例,並從PDO級別實現,但這會產生反作用。 – BlueNile