В приложении laravel 6 я увеличил количество пользователей, получающих пользователей с соответствующими размерами / разрешениями, поскольку мне нужно фильтровать выбранные разрешения и отображать имена разрешений пользователей: я делаю как:
$users = User
::getByName($this->filter_name)
->getByStatus($this->filter_status)
->leftJoin('model_has_permissions', 'model_has_permissions.model_id', '=', 'users.id')
->getByUserPermission($this->filter_user_permission, 'model_has_permissions')
->getByUserPermissionModelType( 'model_has_permissions')
->orderBy($this->order_by, $this->order_direction)
->offset($limit_start)
->take($backend_items_per_page)
->distinct()
->paginate($backend_items_per_page);
$users->getCollection()->transform(function ($user) {
$permissions_text= '';
$permissions = $user->permissions;
foreach( $permissions as $nextPermission ) {
$permissions_text.= $nextPermission->name . ', ';
}
$user->permission_text = MyFuncsClass::trimRightSubString( $permissions_text, ', ' );
return $user;
});
I ожидал, что использование
->distinct()
спасет его, но мне не удалось. Почему?
ОБНОВЛЕННЫЙ БЛОК: Код с whereHas:
->whereHas('permissions', function ($query): void {
$query->where('id', $this->filter_user_permission);
})
работает нормально, если $ this-> filter_user_permission не пусто. В случае, если он пуст. Это не работает. Это внутренняя форма списка, поэтому $ this-> filter_user_permission) может быть заполнен или пуст. Чтобы исправить это, я использовал следующую область:
public function scopeGetByUserPermission($query, $permission_id= null, $table_name)
{
if (!empty($permission_id)) {
if ( is_array($permission_id) ) {
$query->whereIn($table_name.'.permission_id', $permission_id);
} else {
$query->where($table_name.'.permission_id', $permission_id);
}
}
return $query;
}
Он использовался в моем исходном сообщении.
Я пытался использовать его как:
->whereHas('permissions', function ($query): void {
$query->getByUserPermission($this->filter_user_permission, 'model_has_permissions');
})
, но получил ошибку : Вызов неопределенного метода
Подсветка \ База данных \ Eloquent \ Builder :: getByUserPermission ()
Если есть правильный путь?
Спасибо!