Php laravel querybuilder如何在where函数中使用like

Php laravel querybuilder如何在where函数中使用like,php,laravel-5,laravel-query-builder,Php,Laravel 5,Laravel Query Builder,$book=array('book1','book2'); $book数组元素数是可变的。它可能有2个元素或20个元素 我需要进行如下查询: select * from book where bookname like %book1% or bookname like %book2% 要在laravel 5中进行此查询,有一个选项: $name = DB::Table('bookinfo') ->select('*') ->wherein('

$book=array('book1','book2');
$book数组元素数是可变的。它可能有2个元素或20个元素
我需要进行如下查询:

select * from book where bookname like %book1% or bookname like %book2%
要在laravel 5中进行此查询,有一个选项:

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

但是它使用
=
运算符我需要使用
like
运算符

对于包含1个或n个元素的动态查询,将语句用作集合: 对于“like”,可以使用原始语句:

$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();

原始表达

或者,您可以这样使用它:

$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();

感谢大家帮助我,但我通过以下方式解决了问题:

$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();
$book=array('book2','book3','book5');
$name=DB::Table('bookinfo')
->选择('BookName','bookId')
->其中(函数($query)使用($book){
对于($i=0;$iorwhere('bookname','like','%'。$book[$i].%');
}      
})->get();

$book数组元素编号是可变的。它可能有2个元素或20个元素,这相当于@goldlife的答案,只是你的答案更优雅。此解决方案仅在$book数组仅包含2个成员时有效。当$book数组有2个以上的成员时,我将不工作,因为这里提到了“它可能有2个元素或20个元素”。
$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();