Laravel: поиск вложенных отношений

0

У меня есть два вложенных отношения: One is requester.link и requester.company, я хочу, чтобы оба искали слово $request->search.

Код сам по себе поясняет:

$clients = \App\AcceptedConnection::with('requester.link', 'requester.company')
    ->where('accepter_id', Auth::user()->id)
    ->orWhereHas('requester.link', function ($query) use ($request) {
        $query->orWhere('name', $request->search);
    })->orWhereHas('requester.company', function ($query) use ($request) {
        $query->orWhere('email', $request->search);
        $query->orWhere('firstname', $request->search);
        $query->orWhere('lastname', $request->search);
    })->get();

Он дает мне записи для всего, что искал. Он возвращает записи, даже если поиск не соответствует, ищите что угодно, и он даст вам записи,

Что мне не хватает?

  • 0
    у вас есть несколько условий ИЛИ, и если кто-либо из них соответствует, запись придет
  • 0
    @AlivetoDie Точно, это ожидаемое поведение, но я получаю записи, даже если поисковый запрос не соответствует.
Теги:
database
eloquent
laravel-5

1 ответ

1

Вы проверяете, соответствует ли accepter_id=Auth::user()->id или запись соответствует вашему поисковому запросу.

Вы должны whereHas() проверки whereHas() в закрытие:

$clients = \App\AcceptedConnection::with('requester.link', 'requester.company')
    ->where('accepter_id', Auth::user()->id)
    ->where(function($query) use ($request) {
        $query->whereHas('requester.link', function ($query) use ($request) {
            $query->orWhere('name', $request->search);
        })->orWhereHas('requester.company', function ($query) use ($request) {
            $query->orWhere('email', $request->search);
            $query->orWhere('firstname', $request->search);
            $query->orWhere('lastname', $request->search);
        });
    })->get()
  • 0
    Можете ли вы пометить ответ как принятый? Это показывает другим пользователям, что проблема решена.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню