2013-08-17 13 views
5

Ich benutze Laravel Query Builder wie folgt.Laravel Query Builder bindet keine Werte

$col1 = Input::get('col1',''); 
$col2 = Input::get('col2',''); 
$result = DB::table('table1') 
     ->select('id', 'col1', 'col2', 'col3') 
     ->whereRaw("col1 like '%?%'", [$col1]) 
     ->whereRaw("col2 like '%?%'", [$col2]) 
     ->orderBy($orderBy, $orderType) //orderBy=col1, ordeyType=ASC 
     ->skip($ofset)->take($limit) //$ofser=0, $limit=10 
     ->get(); 

Ich bekomme nichts. Wenn ich die Funktion toSql() verwende. Ich bekomme diese SQL wie diese

select `id`, `col1`, `col2`, `col3` 
from `table1` where col1 like '%?%' and col2 like '%?%' 
order by `col1` ASC limit 10 offset 0 

Die Fragezeichen sollten nicht da sein. Es muss sie durch die Werte ersetzen. Ich habe diesen Code zum Debuggen verwendet.

Log::info(var_export(DB::getQueryLog(), true)); 

Die Protokolle sehen aus wie dieses

2 => 
array (
'query' => 'select `id`, `col1`, `col2`, `col3` from `table1` where col1 like \'%?%\' and col2 like \'%?%\' order by `col1` ASC limit 10 offset 0', 
'bindings' => 
    array (
     0 => 'k', 
     1 => '', 
    ), 
'time' => 25.71, 

Ich denke Bindungen nicht pr funktioniert ich etwas falsch tue. Denn wenn ich diesen Code in der Datenbank versuche, funktioniert es. (Außerdem möchte ich die tatsächliche SQL erhalten, die an die Datenbank senden. Wie kann ich das tun?)

select `id`, `col1`, `col2`, `col3` from `table1` 
where col1 like '%k%' and col2 like '%%' 
order by `col1` ASC limit 10 offset 0 

Antwort

0

versuchen

->whereRaw("col1 like '%?%'", [$col1]) 
    ->whereRaw("col2 like '%?%'", [$col2]) 

zu

->whereRaw("col1 like '%?%'", $col1) 
    ->whereRaw("col2 like '%?%'", $col2) 
10

figured it out . Das ? muss für sich selbst gehen, also verketten Sie die% -Symbole mit Ihren Col-Variablen. Und Ihre col Variablen in einem Array setzen (vorausgesetzt, Sie verwenden Laravel 4)

Wechsel:

->whereRaw("col1 like '%?%'", [$col1]) 
->whereRaw("col2 like '%?%'", [$col2]) 

An:

->whereRaw("col1 like ?", array('%'.$col1.'%')) 
->whereRaw("col2 like ?", array('%'.$col2.'%')) 
+0

dank workd es – muhammedea

+1

Ich wünschte, ich könnte diese mehr upvote. Es gibt so viele falsche Beispiele, ich wollte mir gerade das Handgelenk schneiden – Toskan

Verwandte Themen