Вы очень близки, чтобы получить решение. Но я думаю, что ваша ошибка исходит отсюда: переменная $ data в вашем контроллере будет массивом, поэтому в вашем теле foreach вы получите ошибку здесь
$row->item_name
Итак, вместо этого:
$data = DB::table('items')
->where('item_name', 'LIKE', '%{$query}%')
->get();
Напишите это (предположим, что ваша модель называется «Item»):
$data = Item::where('item_name', 'LIKE', '%{$query}%')->get();
ИМХО это решит проблему. Но это вернет только значения с учетом регистра. Например, если вы введете «abc», он не вернет слова с «ABC». Так что для этого вы можете просто сделать 2 стороны в верхнем регистре и сравнить. Вот так:
$data = Item::whereRaw("UPPER(item_name) LIKE '%" . strtoupper($query) . "%'")->get();
Если вы хотите идти вперед и искать также специальные символы, то я думаю, что этот ответ будет не только ответом на ваш вопрос. Но на данный момент я рекомендую вам использовать последний ряд.