2015-12-17 3 views
7

$ book = array ('book1', 'book2'); I numeri degli elementi dell'array di $ book sono variabili. potrebbe avere 2 elemento o 20 elementi
ho bisogno di fare una query simile:laravel querybuilder come usare come in cui la funzione

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

Per effettuare questa ricerca in laravel 5 c'è un'opzione:

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

ma esso uso = operatore ho bisogno di utilizzare like operatore

risposta

10

Grazie a tutti per aiutandomi ma l'ho risolto facendo:

$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

Questo equivale alla risposta di @ goldlife, tranne il tuo è più elegante. –

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

$ book è un array. Non puoi concatenarlo in questo modo. – Leif

+0

ho provato questo ma ha mostrato l'errore: ErrorException in TestController.php linea 116: Conversione da matrice a stringa –

2

per una query dinamica con 1 o n elementi utilizzano la sua dichiarazione come un colle lection: Per il "come" è possibile utilizzare una dichiarazione prima:

$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

oppure è possibile utilizzare in questo modo:

$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

I numeri degli elementi dell'array di $ book sono variabili. potrebbe avere 2 elementi o 20 elementi –

+0

ok, ho aggiornato la mia risposta. – goldlife

+0

thanx ha funzionato –

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

$ i numeri degli elementi dell'array book book sono variabili. potrebbe avere 2 elementi o 20 elementi –

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