2016-07-28 43 views
0

Ich versuche, ein Suchformular mit Laravel zu erstellen, aber ich kann die WHERE-Klausel nicht funktionieren.

Laravel - Where Clause funktioniert nicht

$term = $request->input('term'); 

$count = DB::table('members as m') 
     ->where(DB::raw('m.member_first_name'), 'LIKE', "%$term%") 
     ->orWhere(DB::raw('m.member_last_name'), 'LIKE', "%$term%") 
     ->orWhere(DB::raw('m.member_business_address'), 'LIKE', "%$term%") 
     ->orWhere(DB::raw("concat('m.member_first_name',' ','m.member_last_name')"), 'LIKE', "%$term%") 
     ->orWhere(DB::raw("concat('m.member_last_name',' ','m.member_first_name')"), 'LIKE', "%$term%") 
     ->orWhere(DB::raw("concat('m.member_name_affix',' ','m.member_last_name',' ','m.member_first_name')"), 'LIKE', "%$term%") 
     ->orWhere(DB::raw("concat('m.member_first_name',' ','m.member_name_affix',' ','m.member_last_name')"), 'LIKE', "%$term%") 
     ->count(); 

var_dump($count); 



var_dump ($ count) liefert immer alle Datenbankeinträge, egal, was der Suchbegriff ist.


Dies ist mein erstes Laravel-Projekt und ich wäre sehr dankbar für jede Art von Hilfe.

+1

Führen Sie ein 'dd (DB :: getQueryLog());' nach var_dump aus, um zu überprüfen, welche Abfrage erstellt wird, und geben Sie sie hier ein. – Kamran

+0

Und wie sieht die generierte Abfrage aus, bevor sie ausgeführt wird? – Walf

Antwort

2

Vielleicht versuchen die Abfrage in einer Gesamt Umhüllen wo:

$count = DB::table('members as m') 
     ->where(function ($q) { 
      $q->where(DB::raw('m.member_first_name'), 'LIKE', "%$term%") 
      ->orWhere(DB::raw('m.member_last_name'), 'LIKE', "%$term%") 
      ->orWhere(DB::raw('m.member_business_address'), 'LIKE', "%$term%") 
      ->orWhere(DB::raw("concat('m.member_first_name',' ','m.member_last_name')"), 'LIKE', "%$term%") 
      ->orWhere(DB::raw("concat('m.member_last_name',' ','m.member_first_name')"), 'LIKE', "%$term%") 
      ->orWhere(DB::raw("concat('m.member_name_affix',' ','m.member_last_name',' ','m.member_first_name')"), 'LIKE', "%$term%") 
      ->orWhere(DB::raw("concat('m.member_first_name',' ','m.member_name_affix',' ','m.member_last_name')"), 'LIKE', "%$term%") 
     }) 
     ->count(); 
+0

Danke! Es funktioniert jetzt! Ich werde Ihre Antwort in 7 Minuten akzeptieren! – Schwesi

+0

@kringeltorte Molke Sie verwenden nicht 'whereRaw()' anstelle von 'wo (DB :: raw())' und mit '"% $ term% "' direkt im Abfrage-Generator können einige 'sql injection' anwenden für hier. – Avishek

+0

@Avishek Der Term-Teil dieser Funktion wird immer noch von Eloquent analysiert, um SQL Injection zu verhindern. Ich bin nicht 100%, aber ich denke, mit WhereRaw auf der ganzen Where-Klausel würde dies Eloquents Sanitizing-Methoden umgehen und SQL-Injektion öffnen. – Jono20201

0

Sie verwenden und/oder zusammen, was natürlich fehlschlagen. Versuchen Sie Folgendes:

$count = DB::table('members as m') 
    ->where(DB::raw('m.member_first_name'), 'LIKE', "%$term%") 
    ->where(function ($query) { 
      $query->where(DB::raw('m.member_last_name'), 'LIKE', "%$term%") 
       ->orWhere(DB::raw('m.member_business_address'), 'LIKE', "%$term%")); 
     }) 
0

einfach diesen Code versuchen und wenn Sie einige Syntaxfehler bekam dann versuchen, die ' Symbole hier zu ändern und there..as kann ich es nicht vor Nachtest ..

$term = "%".$request->input('term')."%"; 
$count = DB::table('members as m') 
     ->where('m.member_first_name', 'LIKE', $term) 
     ->orWhere('m.member_last_name', 'LIKE', $term) 
     ->orWhere('m.member_business_address', 'LIKE', $term) 
     ->orWhereRaw('(concat_ws(m.member_first_name,m.member_last_name) LIKE ?)',[$term]) 
     ->orWhereRaw('(concat_ws(m.member_last_name,m.member_first_name) LIKE ?)',[$term]) 
     ->orWhereRaw('(concat_ws(m.member_name_affix,m.member_last_name,m.member_first_name) LIKE ?)',[$term]) 
     ->orWhereRaw('(concat_ws(m.member_first_name,m.member_name_affix,m.member_last_name) LIKE ?)',[$term]) 
     ->count(); 

var_dump($count); 

können Sie whereRaw() nicht DB::raw() innerhalb where() setzen.