Laravel - как выполнить запрос where к полю через отношение? - PullRequest
0 голосов
/ 02 мая 2020

У меня есть модель Member, которая имеет отношение с одним User:

    public function user()
    {
        return $this->hasOne(User::class, "user_id");
    }

Мне нужно выполнить (фильтр) запрос where для полей в пользовательской таблице. Вот моя попытка использовать with() в моем MemberRepository. Что я делаю не так и есть ли лучший подход к этому?

$members = $this->model->where("id", $agencyId)->firstOrFail()->members();

$members->with(['users' => function ($members, $queryParam){
    $members->where('users.name', 'like', $queryParam . '%')
    ->orWhere('users.surname', 'like', $queryParam . '%')
    ->orWhere('users.email', 'like', $queryParam . '%');
}]);

1 Ответ

0 голосов
/ 02 мая 2020

Во-первых, пользовательская модель должна иметь поле id, если уже не используется, во-вторых, поле user_id. Если вы используете user_id в качестве первичного ключа, пожалуйста, используйте:

 protected $primaryKey = 'user_id';

Я думаю, что другой первичный ключ - неправильный путь, правильный путь - идентификатор. Поэтому не используйте user_id в отношениях .... User :: class, "user_id" ...

Во-вторых, если вы не используете переменную в своей модели членов, вы не используете метод eloquent запрос. И еще одна ошибка: с пользователем, а не с пользователями

Ваши измененные коды указаны ниже:

$members->whereHas('user', function ($q) use ($queryParam) {
    $q->where('name', 'like', '%' . $queryParam . '%')
    ->orWhere('surname', 'like', '%' . $queryParam . '%')
    ->orWhere('email', 'like', '%' . $queryParam . '%');
});
...