我有User
和Role
模型擴展了Catalyst's Sentinel包。Laravel的Eloquent方法getKey()返回UUID的第一個數字
如果我使用默認遞增主鍵,一切正常。當我將其更改爲使用UUID時,它的行爲很奇怪。一切工作正常,除了一點細節。
這裏的code snippet檢查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
的ID匹配。
這裏的$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個鏈接)
您是否有機會將此值轉換爲int在'$ casts'數組中? – user3158900
@ user3158900我不這麼認爲。我在哪裏可以找到這個數組?但即使我這樣做了,兩個電話都不會返回相同的東西嗎? – DanVeira
設置受保護的$ keyType ='string';你的模型中的屬性有效嗎? – scrubmx