Поиск в Laravel Select2

#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();