2015-12-17 10 views
7

$ book = array ('book1', 'book2'); $ Buch Array-Elemente Zahlen sind variabel. es könnte 2 Element oder 20 Elemente haben
Ich brauche eine Abfrage wie folgt zu machen:laravel querybuilder wie zu verwenden wie in in Funktion

select * from book where bookname like %book1% or bookname like %book2% 

Um diese Abfrage in Laravel zu machen 5 gibt es eine Option:

$name = DB::Table('bookinfo') 
      ->select('*') 
      ->wherein('bookname',$book) 
      ->get(); 

aber es = Operator ich brauche like Betreiber

Antwort

10

Vielen Dank allen für mir helfen, aber ich löste es durch:

$book = array('book2','book3','book5'); 

$name = DB::Table('bookinfo') 
     ->select('BookName', 'bookId')     
     ->Where(function ($query) use($book) { 
      for ($i = 0; $i < count($book); $i++){ 
       $query->orwhere('bookname', 'like', '%' . $book[$i] .'%'); 
      }  
     })->get(); 
+0

Dies ist äquivalent zu @ goldlife's Antwort außer Ihrer ist eleganter. –

-3
$name = DB::Table('bookinfo') 
     ->select('*') 
     ->wherein('bookname','like','%'.$book.'%') 
     ->get(); 
+0

$ Buch ist ein Array. Sie können es nicht so verketten. – Leif

+0

Ich versuchte dies, aber es zeigte Fehler: ErrorException in TestController.php Zeile 116: Array zu String-Konvertierung –

2

Für eine dynamische Abfrage mit 1 oder n-Elemente verwenden, um Ihre Aussage als col zu verwenden lection: Für die "wie" Sie können eine Raw-Anweisung verwenden:

$collection = DB::Table('bookinfo')->select('*'); 
foreach($book as $key => $element) { 
    if($key == 0) { 
     $collection->where(DB::raw('bookname like %'.$element.'%')); 
    } 
    $collection->orWhere(DB::raw('bookname like %'.$element.'%')); 
} 
$name = $collection->get(); 

http://laravel.com/docs/5.1/queries

Raw Expressions

oder Sie es auf diese Weise verwenden können:

$collection = DB::Table('bookinfo')->select('*'); 
foreach($book as $key => $element) { 
    if($key == 0) { 
     $collection->where('bookname', 'like', '%'.$element.'%'); 
    } 
    $collection->orWhere('bookname', 'like', '%'.$element.'%'); 
} 
$name = $collection->get(); 
+0

$ Buch Array-Elemente Zahlen sind variabel. es könnte 2 Element oder 20 Elemente haben –

+0

okay, ich habe meine Antwort aktualisiert. – goldlife

+0

danke es funktioniert –

-1
$name = DB::Table('bookinfo') 
     ->select('*') 
     ->where("bookname like '%book1%' OR bookname like '%book2%'") 
     ->get(); 
+1

$ Buch Array-Elemente Zahlen sind variabel. Es könnte 2 Elemente oder 20 Elemente haben –

0
$name = DB::Table('bookinfo') 
      ->select('*') 
      ->where('bookname','LIKE','%'.$book[0].'%') 
      ->orWhere('bookname','LIKE','%'.$book[1].'%') 
      ->get(); 
Verwandte Themen