27

$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运算符

4

3 回答 3

41

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

$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();
于 2015-12-17T08:58:55.250 回答
8

对于具有 1 或 n 个元素的动态查询,请将您的语句用作集合:对于“like”,您可以使用 Raw 语句:

$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

原始表达式

或者你可以这样使用它:

$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();
于 2015-12-17T08:38:40.310 回答
-3
$name = DB::Table('bookinfo')
          ->select('*')
          ->where('bookname','LIKE','%'.$book[0].'%')
          ->orWhere('bookname','LIKE','%'.$book[1].'%')
          ->get();
于 2015-12-17T08:47:59.400 回答