【问题标题】:yii - insert data into two tables via single formyii - 通过单一表单将数据插入到两个表中
【发布时间】:2014-04-19 03:51:02
【问题描述】:

我是 PHP 和 Yii 框架的新手。

点击这里查看我的 SQL 数据库设置示例http://i.stack.imgur.com/W6qQj.png

我已经为所有三个表设置了控制器和模型,并从 Gii 为 Users 表设置了 CRUD 视图。我已经阅读了这个 -> http://www.yiiframework.com/wiki/19/how-to-use-a-single-form-to-collect-data-for-two-or-more-models/ 并尝试了多组代码示例等......但失败了。我能做的最好的就是让创建表单将所有数据插入用户表而不是电子邮件表。我相信我的缺点在于我的 UsersController.php -> public function actionCreate() 部分。有人可以用一段示例代码帮助我将信息发布到电子邮件表中吗?

---编辑--- 如下要求是所要求的信息...

UsersController.php

public function actionCreate()
    {
        $model = new Users;
        if (isset($_POST['Users'])) {
            $model->attributes = $_POST['Users'];
                $model->password=crypt($model->password,'salt');
                $model->datecreated = new CDbExpression('NOW()');
            if ($model->save()) {
                $modelEmail = new Email;
                $modelEmail->attributes = $_POST['Email'];
                $modelEmail->fer_users_id = $model->id;
                if ($modelEmail->save())
                    $this->redirect(array('view', 'id' => $model->id));
            }
        }
        $this->render('create', array(
            'model' => $model,
        ));
    }

这是 users/_form.php 视图文件:

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'users-form',
    'enableAjaxValidation'=>false,
)); ?>

    <p class="note">Fields with <span class="required">*</span> are required.</p>

    <?php echo $form->errorSummary($model); ?>

    <div class="row">
        <?php echo $form->labelEx($model,'username'); ?>
        <?php echo $form->textField($model,'username',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($model,'username'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'password'); ?>
        <?php echo $form->passwordField($model,'password',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($model,'password'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'firstname'); ?>
        <?php echo $form->textField($model,'firstname',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($model,'firstname'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'lastname'); ?>
        <?php echo $form->textField($model,'lastname',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($model,'lastname'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx(Email::model(),'emailaddress'); ?>
    <?php echo $form->textField(Email::model(),'emailaddress',array('size'=>60,'maxlength'=>255)); ?>
    <?php echo $form->error(Email::model(),'emailaddress'); ?>
    </div>

    <div class="row">
                <?php echo $form->labelEx($model,'fer_roles_id'); ?>
                <?php
                        echo $form->dropDownList($model, 'fer_roles_id', 
                        CHtml::listData(Roles::model()->findAll(), 'id', 'description'),
                        array('class' => 'my-drop-down', 'options' => array('2' => array('selected' => "selected")

                                    )
                                )
                            );
                ?> 
    </div>

    <div class="row buttons">
        <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
    </div>

<?php $this->endWidget(); ?>

</div>

【问题讨论】:

  • 您必须先创建模型的实例,然后将属性添加到模型中,然后必须保存..您的模型名称是什么?
  • 模型名称为“用户”、“电子邮件”和“角色”。
  • 请上传您的查看代码...
  • 也上传你的动作控制器代码..
  • 请注意,我已经尝试反转 FK,看看我是否可以让代码在没有运气的情况下正常工作......此时尝试任何事情!

标签: php yii frameworks


【解决方案1】:

你可以这样做: 控制器:

<?php

public function actionCreate()
{
    $model = new Users;
    $model1 = new Email;

    $roles = Roles::model()->findAll();

    if(isset($_POST['Users']))
    {
        $model->attributes = $_POST['Users'];
        $model->password = crypt($model->password, 'salt');
        $model->datecreated = new CDbExpression('NOW()');
        $model->save();

        $model1->attributes = $_POST['Users']['emailaddress'];
        $model1->fer_users_id = $model->id;
        $model1->save();

        $this->redirect(array('view', 'id' => $model->id));
    }

    $this->render('create', array(
        'user'=>$model,
        'email'=>$model1,
        'roles'=> $roles
    ));
}

?>

你的看法:

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'users-form',
    'enableAjaxValidation'=>false,
)); ?>

    <p class="note">Fields with <span class="required">*</span> are required.</p>

    <?php echo $form->errorSummary($user); ?>

    <div class="row">
        <?php echo $form->labelEx($user,'username'); ?>
        <?php echo $form->textField($user,'username',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($user,'username'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($user,'password'); ?>
        <?php echo $form->passwordField($user,'password',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($user,'password'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($user,'firstname'); ?>
        <?php echo $form->textField($user,'firstname',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($user,'firstname'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($user,'lastname'); ?>
        <?php echo $form->textField($user,'lastname',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($user,'lastname'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($email,'emailaddress'); ?>
    <?php echo $form->textField($email,'emailaddress',array('size'=>60,'maxlength'=>255)); ?>
    <?php echo $form->error($email,'emailaddress'); ?>
    </div>

    <div class="row">
                <?php echo $form->labelEx($user,'fer_roles_id'); ?>
                <?php
                        echo $form->dropDownList($user, 'fer_roles_id', 
                        CHtml::listData($roles, 'id', 'description'),
                        array('class' => 'my-drop-down', 'options' => array('2' => array('selected' => "selected")

                                    )
                                )
                            );
                ?> 
    </div>

    <div class="row buttons">
        <?php echo CHtml::submitButton($user->isNewRecord ? 'Create' : 'Save'); ?>
    </div>

<?php $this->endWidget(); ?>

</div>

如果您对此有任何错误,请告诉我..

【讨论】:

猜你喜欢
  • 2023-03-17
  • 2019-02-14
  • 2011-09-21
  • 2011-01-16
  • 2017-11-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2019-08-03
相关资源
最近更新 更多