Создание Query Builder из SQL-запроса - PullRequest
0 голосов
/ 31 мая 2018

Моя цель - создать поиск по базе данных Order, но некоторые из них имеют отношения.

Можно ли создать построитель запросов для этого запроса SQL:

SELECT * FROM `order` AS a
JOIN `users` AS b ON b.id = a.user_id
WHERE
LPAD(a.id,6,'0') LIKE '%keyword%'
OR
b.name LIKE '%keyword%'
OR
a.order_detail LIKE '%keyword%'

Теперь я предполагаю использовать orWhere для каждого критерия, например:

Order::where(function ($query) use ($keyword) {
          $query->where(str_pad('Order.order_id', 6, '0', STR_PAD_LEFT), 'LIKE', '%'. $keyword .'%')
                 ->orWhere('Order.order_detail', 'LIKE', '%'. $keyword .'%');
})
->orWhere(function ($query) use ($keyword) {
         //DO JOIN WITH USER TABLE HERE
         $query->where('Order.name', 'LIKE', '%'. $keyword .'%');
})

1 Ответ

0 голосов
/ 31 мая 2018

Попробуйте это:

Order::where(DB::raw("LPAD(id, 6, '0')"), 'LIKE', '%'. $keyword .'%')
    ->orWhere('order_detail', 'LIKE', '%'. $keyword .'%')
    ->orWhereHas('user', function ($query) use ($keyword) {
         $query->where('name', 'LIKE', '%'. $keyword .'%');
    })->get();
...