Конструктор запросов laravel, как использовать, как в, где функция

$ book = array ('книга1', 'книга2'); Номера элементов массива $ 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


person Al-Alamin    schedule 17.12.2015    source источник


Ответы (3)


Спасибо всем за помощь, но я решил это, выполнив:

$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();
person Al-Alamin    schedule 17.12.2015
comment
Это эквивалентно ответу @goldlife, за исключением того, что ваш ответ более элегантен. - person Bhargav Nanekalva; 01.09.2017

Для динамического запроса с 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();
person goldlife    schedule 17.12.2015
comment
Номера элементов массива $ book переменные. он может иметь 2 элемента или 20 элементов - person Al-Alamin; 17.12.2015

person    schedule
comment
Это решение будет работать, только если массив $ book содержит только 2 члена. Я не буду работать, если в массиве $ book более 2 элементов, поскольку в нем может быть 2 элемента или 20 элементов, о которых идет речь. - person Prem popatia; 25.05.2019