我有两个直接在一对一关系中相关的表。一个是标准的YII2用户表(此处缩写字段列表为了清楚起见),另一个是包含user_id的员工表。如何创建一个可以在应用程序中使用的任何地方使用的全球访问变量(以及访问员工ID的实际代码),以使我登录用户的员工ID,以及如何称呼该变量?我希望我可以说我已经尝试了一些事情,但是不幸的是,我对YII2的新事物相对较新,不知道从哪里开始这样的全局变量。感谢您的任何帮助。
用户表:
id
用户名
密码
等
员工表:
id
user_id(与用户表的一对一关系有关)
员工模型:
<?php
namespace frontendmodelsbase;
use Yii;
/**
* This is the base model class for table "employee".
*
* @property integer $id
* @property integer $user_id
*
* @property commonmodelsUser $user
*/
class Employee extends yiidbActiveRecord
{
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 yiidbActiveQuery
*/
public function getUser()
{
return $this->hasOne(commonmodelsUser::className(), ['id' => 'user_id']);
}
}
一种非常简单的方法是使用$ param Array
您最初可以在
中配置默认值your_Appconfigparam.php
并使用
访问Yii::$app->params['your_param_key']
寻找您的员工模型(对我来说)您不需要全局var,您可以简单地使用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();
我相信正确的方法是使用User
模型中的关系。第一个方法是与ActivereCord的正确关系,第二个方法将使用上面定义的关系获得ID。因此,您将在用户模型中添加这些方法:
/**
* @return yiidbActiveQuery
*/
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_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;