2

2つのテーブルを取得しました:

1)ユーザー( idloginpassworduser_roles_id...)
2) user_roles ( role_idrole_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" }
4

0 に答える 0