2017-07-10 2 views
0

In Laravel 5 versuche ich eine Kundenanfrage zu stellen. Mein Code ist wie folgt:Laravel 5 Benutzerdefinierte Abfrage Ungültige Parameternummer

$ params = array ( 'Kriterien' => Kriterien $, 'Kriterien1' => Kriterien $ );

Außer ich bekomme diesen Fehler, auch wenn ich DB :: raw entfernen, und ich habe versucht DB :: wählen Sie auch.

SQLSTATE[HY093]: Invalid parameter number: :criteria (SQL: SELECT * FROM tasks 
JOIN users ON 
users.id = tasks .client_id 
WHERE notes LIKE '%:criteria%' OR name LIKE '%:criteria1 %') 
in Connection.php (line 647) 
at Connection->runQueryCallback(object(Expression), array('criteria' => 'Devin', 'criteria1' => 'Devin'), object(Closure)) 
in Connection.php (line 607) 
at Connection->run(object(Expression), array('criteria' => 'Devin', 'criteria1' => 'Devin'), object(Closure)) 
in Connection.php (line 450) 

Hat jemand eine Idee, warum das passiert und wie zu beheben?

+0

Versuchten Sie eloquent Modellen? Die Abfrage sieht nicht so kompliziert aus (es sei denn, Sie haben sie für den Post vereinfacht). Warum sollten Sie row sql anstelle von Modellen verwenden? Wie für die Ausnahme scheint es, wenn Sie die Variable in%% einschließen, könnte es buchstäblich als das Kriterium selbst statt als eine Variable – ayip

Antwort

0

Try DB:select() mit dem $params Array als zweites Argument zu verwenden, wie folgt aus:

$params = array('criteria' => $criteria, 'criteria1' => $criteria); 

//Define the SQL 
$sql = 'SELECT * FROM ' . $this -> _taskTableName .' 
JOIN ' . $this -> _userTableName .' ON 
' . $this -> _userTableName .'.id = ' . $this -> _taskTableName .' .client_id 
WHERE notes LIKE \'%:criteria%\' OR name LIKE \'%:criteria1%\' '; 


//Exeute the search 
$tasks = DB::select($sql, $params); 
+0

Nein, das gleiche Ergebnis. Der einzige Unterschied in Ihrem ist, dass Sie uns nicht verwenden DB:; roh –

0

Sie können tun, wie unten

$sql = 'SELECT * FROM ' . $this -> _taskTableName .' 
     JOIN ' . $this -> _userTableName .' ON 
     ' . $this -> _userTableName .'.id = ' . $this -> _taskTableName .' .client_id 
     WHERE notes LIKE \'%?%\' OR name LIKE \'%?%\' '; 
    DB::select($sql,array($criteria,$criteria)); 
Verwandte Themen