Yii2如何创建一个全局可访问的变量,将用户的id转换为员工的id

时间:2016-12-24 10:47:35

标签: yii2 global-variables yii2-advanced-app

我有两个与一对一关系直接相关的表。一个是标准的Yii2用户表(为清楚起见,这里是缩写字段列表),另一个是包含user_id的员工表。如何创建一个全局可访问的变量(以及访问员工ID的实际代码),我可以在我的应用程序中的任何位置使用该变量,它将为我提供登录用户的员工ID以及如何调用该变量?我希望我可以说我已经尝试了一些东西,但不幸的是我对Yii2相对较新,并且不知道从哪里开始这样的全局变量。谢谢你的帮助。

用户表:
ID
用户名
密码

员工表:
ID
user_id(与用户表一对一关系)

员工模型:

<?php

namespace frontend\models\base;

use Yii;

/**
 * This is the base model class for table "employee".
 *
 * @property integer $id
 * @property integer $user_id

 *
 * @property \common\models\User $user
 */
 class Employee extends \yii\db\ActiveRecord
{
public function rules()
{
    return [
        [['user_id', 'required'],
        [['user_id'], 'integer'],
        [['user_id'], 'unique']
    ];
}

public static function tableName()
{
    return 'employee';
}

public function attributeLabels()
{
    return [
        'id' => Yii::t('app', 'ID'),
        'user_id' => Yii::t('app', 'User ID'),
    ];
}

/**
 * @return \yii\db\ActiveQuery
 */
public function getUser()
{
    return $this->hasOne(\common\models\User::className(), ['id' => 'user_id']);
}
}

2 个答案:

答案 0 :(得分:4)

一种非常简单的方法是使用$ param array

您最初可以在

中配置默认​​值
your_App\config\param.php  

并使用

进行访问
\Yii::$app->params['your_param_key']

期待您的员工模式(对我而言)您不需要全局变量,您只需使用getUser

  $myUser = Employee::user();

但您需要使用

指定的参数
  \Yii::$app->params['my_user'] = Employee::user();

或用户

  \Yii::$app->params['my_user'] =  Yii::$app->user->id

或用于从表

中检索与实际用户相关的模型
$myEmpModel  =  Employee::find()->where['user_id' =>  Yii::$app->user->id]->one(); 

答案 1 :(得分:1)

我认为正确的方法是在User模型中使用关系。第一种方法是与activerecord的正确关系,第二种方法将使用上面定义的关系获得id。所以您将在用户模型中添加这些方法:

/**
 * @return \yii\db\ActiveQuery
 */
public function getEmployee()
{
    return $this->hasOne(Employee::className(), ['user_id' => 'id']);
}

public function getEmployeeId()
{
    return $this->employee ? $this->employee->id : NULL; // set to NULL or anything you expect to be if record is not found
}

然后你可以在应用程序的任何地方这样调用它:

$employee_id = Yii::$app->user->identity->employeeid;

这只适用于User模型,因为它实现了Identity,否则你需要首先实例化模型类,让我们这样说:

$user_id = 5; // 5 is id of user record in DB
$user = User::findOne($user_id);
$employee_id = $user->employeeid;
// or using first of 2 relations ...
$employee_id = $user->employee->id;