如何在 YII2 Advanced 中将 Employee 表中的数据添加到用户表中
Posted
技术标签:
【中文标题】如何在 YII2 Advanced 中将 Employee 表中的数据添加到用户表中【英文标题】:how to add data from Employee table to user table in YII2 advanced 【发布时间】:2017-09-12 08:45:34 【问题描述】:我正在处理我的拼贴项目,即员工管理。我在 sql 中有 Employee 表(crud 也是从 gii 生成的)。只有管理员有权创建员工(没有注册)。
我的问题:当我创建员工时,我也无法在用户表中保存数据,请帮助我在员工和用户表中保存数据。
提前致谢
更新:
下面是代码:
public function actionCreate()
$model1=new Employee;
$model2=new User;
if(isset($_POST['Employee']) && isset($_POST['User']))
$model1->attributes=$_POST['Emoloyee'];
$model2->attributes=$_POST['User'];
$model1->save();
$model2->save();
echo 'data is saved in both tables';
$this->render('create',array('model1'=>$model1,model2'=>$model2));
【问题讨论】:
到目前为止你尝试了什么? 可以显示保存员工的代码吗? 公共函数 actionCreate() $model1=new Employee; $model2=新用户; if(isset($_POST['Employee']) && isset($_POST['User'])) $model1->attributes=$_POST['Emoloyee']; $model2->attributes=$_POST['User']; $model1->保存(); $model2->保存(); echo '数据保存在两个表中'; $this->render('create',array('model1'=>$model1,model2'=>$model2)); 嗨,我的员工控制器的 Chinmay 代码如下: public function actionCreate() $model1=new Employee; $model2=新用户; if(isset($_POST['Employee']) && isset($_POST['User'])) $model1->attributes=$_POST['Emoloyee']; $model2->attributes=$_POST['User']; $model1->保存(); $model2->保存(); echo '数据保存在两个表中'; $this->render('create',array('model1'=>$model1,model2'=>$model2)); 您可以编辑问题并将代码放在那里。 cmets部分的代码很难阅读。 【参考方案1】:你可能有一些验证问题
试试这样检查
......
$model1->attributes=$_POST['Emoloyee'];
$model2->attributes=$_POST['User'];
if ($model1->validate() && $model2->validate() )
$model1->save();
$model2->save();
else
$errors1 = $model1->errors;
$errors2 = $model2->errors;
var_dump($errors1);
var_dump($errors2);
exit();
然后只是为了调试尝试使用
$model1->attributes=$_POST['Emoloyee'];
$model2->attributes=$_POST['User'];
$model1->save(false);
$model2->save(false);
如果值已保存,请检查 db ..
【讨论】:
我没有遇到任何验证问题,已迁移用户表并在控制器中包含类,但数据未插入用户表(仅在 Employee 表中)可能的方式是什么。在高级 yii2 中,用户可以从用户表登录,所以我希望员工表中的数据也发送到用户表。如果有任何其他更好的方法可以创建和登录员工 我已经用测试的建议更新了答案..让我知道【参考方案2】:你可以试试这个例子,
public function actionCreate()
$model = new Employee();
$user = new User();
if ($model->load(Yii::$app->request->post()) && $user->load(Yii::$app->request->post()))
if($model->save() && $user->save())
Yii::$app->session->setFlash('success', 'Record saved successfully.');
else
//var_dump($model->getErrors());
//var_dump($user->getErrors());
Yii::$app->session->setFlash('error', 'Record not saved.');
return $this->redirect(['index']);
else
var_dump($model->getErrors());
var_dump($user->getErrors());
die();
return $this->render('create', [
'model' => $model,
'user' => $user,
]);
【讨论】:
感谢您的建议,但此代码也无法正常工作。我已经迁移了用户表,并且还在控制器中包含了类,但是数据没有插入到用户表中(仅在 Employee 表中),这可能是什么方法。在高级 yii2 中,用户可以从用户表登录,所以我希望员工表中的数据也发送到用户表。如果有任何其他更好的方法可以创建和登录员工 将此添加到您的布局文件中,以便您在成功或失败时查看输出。<?=yii\bootstrap\Alert::widget() ?>
@Yuvrajverma。检查更新的答案,这是确保模型正确加载和保存的正确和更好的方法。参考yii官方文档。【参考方案3】:
按照以下链接中的说明进行操作。这应该工作
how to insert data to 2 tables i.e Employee and User(migrated) from single form(Employee Create) and controller in yii2
【讨论】:
以上是关于如何在 YII2 Advanced 中将 Employee 表中的数据添加到用户表中的主要内容,如果未能解决你的问题,请参考以下文章