2つのテーブルを取得しました:
1)ユーザー( id
、login
、password
、user_roles_id
...)
2) user_roles ( role_id
、role_name
、...)
2 番目の on と結合する最初のテーブルからユーザー データを取得する必要がありますuser_role_id = role_id
。
両方のテーブルについて、モデルを作成しました:
1) app\models\Users.php
public function getUserRoles()
{
return $this->hasOne(userRoles::className(), ['role_id' => 'user_roles_id']);
}
2) app\models\UserRoles.php
public function getUsers()
{
return $this->hasMany(Users::className(), ['user_roles_id' => 'role_id']);
}
サイトでの認証のために、私は別のクラスを使用しています:
アプリ\モデル\User.php
namespace app\models;
use app\models\Users as DbUser;
class User extends \yii\base\Object implements \yii\web\IdentityInterface
{
public $id;
public $username;
public $password;
public $authKey;
public $accessToken;
public $email;
public $user_roles_id;
public $role_id;
public $role_name;
public $member_since;
public $name;
public $surname;
/**
* @inheritdoc
*/
public static function findIdentity($id) {
$dbUser = DbUser::find()
->joinWith('userRoles')
->where([
"id" => $id
])
->one();
if (!count($dbUser)) {
return null;
}
return new static($dbUser);
}
/**
* @inheritdoc
*/
public static function findIdentityByAccessToken($token, $userType = null) {
$dbUser = DbUser::find()
->joinWith('userRoles')
->where(["accessToken" => $token])
->one();
if (!count($dbUser)) {
return null;
}
return new static($dbUser);
}
/**
* Finds user by username
*
* @param string $username
* @return static|null
*/
public static function findByUsername($username) {
$dbUser = DbUser::find()
->joinWith('userRoles')
->where([
"username" => $username
])
->one();
if (!count($dbUser)) {
return null;
}
return new static($dbUser);
}
}
これによりエラーは発生しませんが、アクティブなユーザーの role_name を取得できません。これが のvardump
ですYii::$app->user->identity
。
object(app\models\User)#80 (12) {
["id"]=> int(2)
["username"]=> string(4) "demo"
["password"]=> string(32) "fe01ce2a7fbac8fafaed7c982a04e229"
["authKey"]=> string(10) "test101key"
["accessToken"]=> string(9) "101-token"
["email"]=> string(12) "test@mail.ml"
["user_roles_id"]=> int(1)
["role_id"]=> NULL
["role_name"]=> NULL
["member_since"]=> int(1442061812)
["name"]=> string(6) "Kirsan"
["surname"]=> string(6) "Kayfat" }