laravel querybuilder как использовать как в котором функция

$ 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 оператор

12

Решение

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

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

Другие решения

Для динамического запроса с 1 или n элементами используйте ваш оператор как коллекцию:
Для «лайка» вы можете использовать необработанный оператор:

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

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

$name = DB::Table('bookinfo')
->select('*')
->where("bookname like '%book1%' OR bookname like '%book2%'")
->get();
-1
По вопросам рекламы [email protected]