2015-12-17 11 views
7

$ book = array( 'book1'、 'book2'); $のブック配列の要素番号は可変です。オプションがありますlaravel 5でこのクエリを作成するにはlaravel querybuilderここでのような機能を使用する方法

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

:それは2要素または私はこのようなクエリを作成する必要がある20個の要素
がある可能性があります

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

が、それは=演算子を使用しますlike演算子を使用する必要があります

答えて

10

みんなありがとう、あなたが生のステートメントを使用することができます "のような" については 私を助けてくれましたが、私はそれを解決して解決しました:

$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

これはあなたがよりエレガントであることを除いて、@ goldlifeの答えに相当します。 –

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

$ bookは配列です。このように連結することはできません。 – Leif

+0

私はこれを試しましたが、エラーが表示されました: TestController.php行のErrorException 116: 文字列変換への配列 –

2

1またはn要素の動的クエリでは、文を列として使用しますlection:

$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

か、この方法でそれを使用することができます:用

$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

$ブック配列の要素番号が可変です。それは2要素か20要素を持っているかもしれません –

+0

大丈夫、私は私の答えを更新しました。 – goldlife

+0

これはうまく機能しました –

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

$本の配列要素番号は可変です。それは2要素か20要素を持っているかもしれません –

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