Laravel Select2 Поиск - PullRequest
       12

Laravel Select2 Поиск

0 голосов
/ 11 марта 2019

Я использую плагин select2 jquery, но не могу найти данные, которые хочу вывести. Я пытался найти название книги в моей базе данных, которая должна быть доступна, и в филиале компании, в котором я сейчас нахожусь. У меня есть две таблицы для этого.

книги

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 работает, если я не использую отношения.

1 Ответ

1 голос
/ 11 марта 2019

Вы можете использовать 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();
...