#php #ajax #eloquent #jquery-select2
#php #ajax #красноречивый #jquery-select2
Вопрос:
Я использую плагин jquery select2, но я не могу выполнить поиск данных, которые я хочу вывести. Я пытался выполнить поиск по названию книги в моей базе данных, которая должна быть доступна, и в филиале компании, в котором я сейчас нахожусь. Для этого я имею дело с 2 таблицами.
Книги
book_type_id [1, 2]
status ['Available', 'Available']
book_type
id [1, 2] name ['Book 1', 'Book 2']
и
public function get_available_book_type(Request $request){
$employee = employee::where('id', Auth::user()->emp_id)->first();
$bt = books::with('book_type')->where('branch_id', $employee->branch_id)
->where('status', 'Available')->where('id', 'LIKE', '%'.$request->name.'%')->groupBy('book_type_id')->get();
$book_type = $bt->where('book_type.name', 'like', '%'.$request->name.'%');
$array = [];
foreach ($book_type as $key => $value){
$array[] = [
'id' => $value['id'],
'text' => $value['book_type']['name']
];
}
return json_encode(['results' => $array]);
}
В результате появляется сообщение «результаты не найдены». Однако, когда я использую
$book_type = $bt->where('book_type.name', $request->name);
Он возвращает данные, поэтому я считаю, что мой первоначальный запрос правильный и не пустой, но это не то, что я хочу, потому что я использую это для поиска, и я не ожидаю, что мой пользователь введет все слово, чтобы вывести его в select2.
$book_type
Запрос like работает, если я не использую relationship.
Ответ №1:
Вы можете использовать whereHas
метод для фильтрации по отношениям:
$book_type = books::with('book_type')
->where('branch_id', $employee->branch_id)
->where('status', 'Available')
->where('id', 'LIKE', '%'.$request->name.'%')
->whereHas('book_type', function($query) use ($request) {
$query->where('book_type.name', 'LIKE', '%'.$request->name.'%');
}
->groupBy('book_type_id')->get();