2016-11-07 3 views
1

私はUserRoleのモデルをCatalyst's Sentinelに拡張しています。LaravelのEloquentメソッドgetKey()は、UUIDの最初の番号を返します

デフォルトの増分プライマリキーを使用するとすべて正常に動作します。 UUIDを使用するように変更すると変な動作をします。ちょっとしたこと以外はすべてうまく動作します。

はここUserRoleに属するか否かをチェックするためにcode snippetです:

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と一致します。 "8fbc99e2-3cbb-4e98-b0e3-4c88027d787f"

しかし$instance->getRoleId()戻り8、または任意のUUIDの最初の数字は次のとおりです。

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

$role->getRoleId()が正しくUUIDを返します。

はここ$user->roles$this->roles)の関係です。最初の文字がレターの場合、0を返します。

私はが確かにRoleInterfaceのインスタンスであることを確認しましたので、正確には$roleと同じように動作するはずです。

また、両方のモデルにpublic $incrementing = falseを追加しました。

私は、呼び出されたすべてのベンダー機能にいくつかのチェックポイントを作成しましたが、これがなぜ起こっているのかわかりません。

ご協力いただきまして誠にありがとうございます。

GitHubリポジトリに新しい問題が発生しましたので、回答を同期させるためのリンクがあります:github.com/cartalyst/sentinel/issues/289(申し訳ありませんが2つ以上のリンクを投稿できません)

+0

この値を '$ casts'配列でint型にキャストしていますか? – user3158900

+0

@ user3158900私はそうは思わない。そのアレイはどこにありますか?しかし、私がしたとしても、両方の呼び出しが同じものを返す必要はありませんか? – DanVeira

+0

保護された$ keyType = '文字列'を設定していますか?モデルのプロパティは機能しますか? – scrubmx

答えて

関連する問題