Метод Eloquent от Laravel getKey () возвращает первое число UUID

у меня есть User и Role расширение модели Страж Катализатора пакет.

Все работает нормально, если я использую первичный ключ по умолчанию. Когда я изменяю его на использование UUID, это ведет себя странно. Все работает отлично, за исключением небольшой детализации.

Вот фрагмент кода проверить, является ли User принадлежит к Role или нет:

public function inRole($role)
{
if ($role instanceof RoleInterface) {
$roleId = $role->getRoleId();
}
foreach ($this->roles as $instance) {
if ($role instanceof RoleInterface) {
if ($instance->getRoleId() === $roleId) {
return true;
}
} else {
if ($instance->getRoleId() == $role || $instance->getRoleSlug() == $role) {
return true;
}
}
}
return false;
}

Что делает этот код: если я передаю экземпляр Role он просматривает все роли пользователя и проверяет, соответствует ли какая-либо из них $roleИдентификатор

Вот $user->roles ($this->roles) отношения:

public function roles()
{
return $this->belongsToMany(static::$rolesModel, 'role_users', 'user_id', 'role_id')->withTimestamps();
}

$role->getRoleId() правильно возвращает UUID: "8fbc99e2-3cbb-4e98-b0e3-4c88027d787f"

Но $instance->getRoleId() возвращается 8или каким бы ни был первый числовой символ UUID. Если первый символ представляет собой букву, он возвращает 0,

Я подтвердил, что $instance действительно является примером RoleInterface поэтому я думаю, что он должен вести себя точно так же, как $role,

Я также добавил public $incrementing = false для обеих моделей.

Я сделал несколько контрольных точек во всех вызываемых функциях вендора, и я не могу понять, почему это происходит.

Любая помощь с благодарностью.

Я открыл новую проблему в их репозитории GitHub, так что вот ссылка для синхронизации ответов: github.com/cartalyst/sentinel/issues/289 (извините, я не могу опубликовать более 2 ссылок)

1

Решение

Это была ошибка в пакете, и она была исправлена: https://github.com/cartalyst/sentinel/commit/239fa9ec88ce8fb955f5c0d85311d55a2f76e314

1

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

Других решений пока нет …