2016-11-07 49 views
1

我有UserRole模型擴展了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個鏈接)

+0

您是否有機會將此值轉換爲int在'$ casts'數組中? – user3158900

+0

@ user3158900我不這麼認爲。我在哪裏可以找到這個數組?但即使我這樣做了,兩個電話都不會返回相同的東西嗎? – DanVeira

+0

設置受保護的$ keyType ='string';你的模型中的屬性有效嗎? – scrubmx

回答

相關問題