2013-08-17 15 views
5

Używam tego typu kreatora zapytań typu laravel.Konstruktor zapytań Laravel nie wiąże wartości

$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(); 

Nic nie dostaję. Jeśli używam funkcji toSql(). Otrzymuję ten kod SQL taki, jak ten Znak zapytania nie powinien tam być. Musi zastąpić je wartościami. Użyłem tego kodu do debugowania go.

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

Dzienniki wyglądać następująco

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, 

myślę Wiązania nie działa pr robię coś złego. Ponieważ jeśli spróbuję tego kodu w bazie danych działa. (Ponadto, chcę uzyskać rzeczywiste sql które wysyłają do bazy danych. W jaki sposób mogę to zrobić?)

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

Odpowiedz

0

spróbować

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

do

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

Zdobione . ? musi przejść sam, więc połącz symbole% ze zmiennymi col. I umieścić swoje zmienne col w tablicy (przy założeniu, że używasz laravel 4)

Change:

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

Do:

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

thanks to workd – muhammedea

+1

Chciałabym upvote tym bardziej. Jest tyle złych przykładów, miałem zamiar przeciąć mój nadgarstek – Toskan

Powiązane problemy