Как вы фильтруете пользователя с помощью hasRole () в Laravel 5 в реляционном запросе?

Я хочу отфильтровать свой запрос и вернуться только в том случае, если у пользователя есть значение «Премиум» и ограничение результата до 10.

Наряду с этим запросом указывается количество записей, которые есть у Conversion, и сортировка их в порядке DESC по общему столбцу.

Прямо сейчас у меня есть рабочий запрос, который возвращает количество конверсий и с пользователем, но без роли фильтра пользователя.

// Model Conversion belongs to User
// $from & $end uses Carbon::createDate()
// Current code
$query = Conversion::select('user_id',DB::raw('COUNT(*) as total'))
->whereBetween('created_at', [$from,$end])
->where('type','code')
->where('action','generate')
->whereNotNull('parent_id')
->with('user')
->groupBy('user_id')
->orderBy('total', 'DESC')
->take(10)
->get();

// current result
foreach ($query as $q) {
$q->user->name; // To access user's name
$q->total; // To access total count
}

// I tried this but no luck
$query = Conversion::select('user_id',DB::raw('COUNT(*) as total'))
->whereBetween('created_at', [$from,$end])
->where('type','code')
->where('action','generate')
->whereNotNull('parent_id')
->with('user', function($q) {
$q->hasRole('Premium');
})
->groupBy('user_id')
->orderBy('total', 'DESC')
->take(10)
->get();

2

Решение

Вам нужно использовать whereHas вместо with, как это:

 ->whereHas('user', function ($query) {
$query->where('role','Premium');
})
1

Другие решения

Использовать whereHas() вместо with(), Кроме того, вы не можете использовать hasRole() если это не локальная область:

->whereHas('user.roles', function($q) {
$q->where('name', 'Premium');
})
1

По вопросам рекламы [email protected]