如何在 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'=>$mod‌​‌​el2)); 

【问题讨论】:

到目前为止你尝试了什么? 可以显示保存员工的代码吗? 公共函数 actionCreate() $model1=new Employee; $model2=新用户; if(isset($_POST['Employee']) && isset($_POST['U​​ser'])) $model1->attributes=$_POST['Emoloyee']; $model2->attributes=$_POST['U​​ser']; $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['U​​ser'])) $model1->attributes=$_POST['Emoloyee']; $model2->attributes=$_POST['U​​ser']; $model1->保存(); $model2->保存(); echo '数据保存在两个表中'; $this->render('create',array('model1'=>$model1,model2'=>$mod‌​el2)); 您可以编辑问题并将代码放在那里。 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 表中的数据添加到用户表中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Yii2 中将 textInput 设置为只读?

yii2.0-advanced 高级版项目搭建

如何在 yii2 中将应用资产编译为模块资产?

yii2.0-advanced 高级版项目搭建

如何在 Yii2 中将接口注入控制器的构造函数

如何在yii2中将JSON返回给ajax [重复]