2017-07-28 68 views
1

我做了一些方式來分配參數,但它不工作Laravel使用原始查詢,如運營商和「%」

這裏添加參數是我的代碼:

$sqlDefault = "Select * from histories as h where h.status like % :status %"; 

return DB::select(DB::raw($sqlDefault), ['status' => $status]); 

它不工作,所以我嘗試另一個方式來分配:

'%:status%''%':status'%'

但它不工作

現在我不使用參數,它perfectlly工作

$sqlDefault = "Select * from histories as h where h.status like '%$status%'";

的問題是使用類似於「%」運算符的時候,我可以如何使用參數?

回答

2

準備好的語句的佔位符在'%...%'之內不起作用,因爲它然後將其視爲string值而不是placeholder。您必須直接放置佔位符,然後傳遞值包括"%{$variable}%"

如果你想查詢的查詢被執行何種試試這個

$sql = "SELECT * FROM `histories` AS h WHERE `h`.`status` LIKE :status"; 

return DB::select($sql, [ 'status' => "%{$status}%" ]); 
+0

感謝您的善意回覆,但它仍然顯示什麼。 當我改變'$ sql =「選擇*從'歷史'在哪裏'狀態'''''狀態';'和搜索正確的值,它的工作 在我的情況我使用連接函數,所以我是''history.status '',是不是? –

+0

@VuHoangDuc我已經更新了我的答案。嘗試一下 –

+0

謝謝,當我刪除{} –

0

,你可以使用dd(DB::getQueryLog())

試試這個:

$result = DB::table('histories')->where('status', 'like', '%' . $status . '%')->get(); 
0

試試這個沒有分配參數

DB::table('histories') 
    ->where('status' , 'like', '%'. $status .%') 
    ->get(); 

或者您可以使用直接的歷史App類這樣

頂部

添加use App/Histories;而使用像這樣的查詢

Histories::where('status' , 'like', '%'. $status .%')->get(); 
+0

謝謝!我現在使用它,但我想找到解決方案分配參數與% –

2

更換$status'%'.$status.'%'

$sqlDefault = "Select * from histories as h where h.status like :status "; 

return DB::select(DB::raw($sqlDefault,['status' => '%'.$status.'%'])); 

或只使用唯一選擇:

return = DB::select(sqlDefault , ['status' => '%'.$status.'%']); 
+0

謝謝,它的工作perfectlly –