Laravel запрос отношения с проблемой "LIKE" - PullRequest
2 голосов
/ 23 марта 2020

У меня следующие LARAVEL собственные отношения на модели пользователя:

public function matchesSet(){
        return $this->belongsToMany(self::class, 'matches', 'user_id', 'match_id')->withPivot('confirmed');
}

Затем я запускаю:

User::first()->matchesSet->where('pivot.confirmed', true)->where('name','LIKE', 'John')->count()

или

User::first()->matchesSet->where('pivot.confirmed', true)->where('name','John')->count()

и Я получаю ожидаемый результат: «1» в этом случае.

НО, если я добавлю% к запросу LIKE, в любом из следующих вариантов:

User::first()->matchesSet->where('pivot.confirmed', true)->where('name','LIKE', '%John%')->count()
User::first()->matchesSet->where('pivot.confirmed', true)->where('name','LIKE', '%{John}%')->count()
User::first()->matchesSet->where('pivot.confirmed', true)->where('name','LIKE', "%John%")->count()
User::first()->matchesSet->where('pivot.confirmed', true)->where('name','LIKE', "%{John}%")->count()

тогда я получаю неправильный результат во всех случаях: "0".

Что не так с моими запросами LIKE?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 23 марта 2020

Попробуйте этот код,

$q = 'John'
User::first()
->matchesSet
->where('pivot.confirmed', true)
->where('name', 'LIKE', '%' . $q . '%')->count()
3 голосов
/ 23 марта 2020

Вам нужно вызвать matchesSet как функцию, чтобы вызвать запрос, и использовать wherePivot для запроса атрибута pivot:

User::first()->matchesSet()->wherePivot('confirmed', true)->where('name', 'like', '%John%')->count();

В противном случае вы просто ссылаетесь на функцию where из Illuminate\Database\Eloquent\Collection.

Для получения дополнительной информации см. Фильтрация отношений по столбцам промежуточной таблицы : https://laravel.com/docs/7.x/eloquent-relationships#many-ко-многим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...