yii管理窗体中子表数据

guicsvcw  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(96)

我正在做YII框架,我是一个新手。我有用户注册表如下所示:
用户名:[文本框]
电子邮件:[文本框]
地址:[文本区域]
用户贷款类型:(复选框列表如下)

  • 贷款类型1
  • 贷款类型2
  • 贷款类型3
  • 贷款类型4
  • 贷款类型5

状态[是/否]
现在我有3个模型:
1)用户(用于用户数据)
2)LoanType(仅用于贷款类型列表)
3)UserLoanType(用户和贷款类型之间的Map)
所有3个模型都有HAS_MANY和BELONGS_TO关系,就像我们在YII中通常做的那样。
现在,当用户点击注册按钮时,我也想在user_loan_type表中保存数据。我可以简单地在actionCreate中添加核心php逻辑。但是有没有标准的YII实践来做这个??因为我需要验证,在编辑过程中保持选中表单等。有人能指导我如何做吗?或者给我指一个示例链接,我在谷歌上搜索过,但没有帮助。

  • 谢谢-谢谢
    我可以保存数据库中的数据,现在在编辑我想检索第三个表的(tbl_user_loan_request_type)数据。我使用了下面的代码。
$user = User::model()->findByPk(5); 
    print_r($user->UserLoanTypes);

但它给我的是空白数组。我错在哪里??

f1tvaqid

f1tvaqid1#

您可以在类别中定义afterSave方法,如下所示:
模型用户

public function relations()
{
    return array(
        'UserLoanTypes' => array(self::MANY_MANY, 'LoanType', 'UserLoanType(userId, loanId)'),
    );
}

// relation
        array('UserLoanTypes', 'safe'),

// label
        'UserLoanTypes' => 'User Loan Type'

protected function afterSave()
{
    parent::afterSave();
    UserLoanType::model()->deleteAll('userId=:id', array(':id' => $this->id));
    foreach ($this->UserLoanTypes  as $loanId) {
         $userLoanType = new UserLoanType();
         $userLoanType->userId = $this->id;
         $userLoanType->loadId = $loadId;
         $userLoanType->save();
    }
}

protected function afterDelete()
{
    parent::afterDelete();
    UserLoanType::model()->deleteAll('userId=:id', array(':id' => $this->id));
}

在形式上:

<div class="row">
    <?php echo $form->labelEx($model,'UserLoanTypes'); ?>
    <?php echo $form->checkBoxList($model,'UserLoanTypes', CHtml::listData($LoanTypes, 'id', 'loanName')); ?>
    <?php echo $form->error($model,'UserLoanTypes'); ?>
</div>

您可以:

<?php $this->widget('zii.widgets.CDetailView', array(
    'data'=>$model,
    'attributes'=>array(
        'id',
        'name',
        'UserLoanTypes' => array(
            'name'  => 'UserLoanTypes',
            'value' => implode(',', CHtml::listData($model->UserLoanTypes, 'id', 'name')),
        ),
     ),
   )); ?>
jdzmm42g

jdzmm42g2#

如果您不需要将多个loanType分配给一个User,那么这会更简单。您所需要的只是表单可视化的User模型:

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

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

<div class="row">
    <?php echo $form->labelEx($model,'Username'); ?>
    <?php echo $form->textField($model,'Username'); ?>
    <?php echo $form->error($model,'Username'); ?>
</div>
<div class="row">
    <?php echo $form->labelEx($model,'Email'); ?>
    <?php echo $form->textField($model,'Email'); ?>
    <?php echo $form->error($model,'Email'); ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'Address'); ?>
    <?php echo $form->textArea($model,'Address'); ?>
    <?php echo $form->error($model,'Address'); ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'UserLoanType'); ?>
    <?php echo $form->checkBoxList($model,'idLoanType', CHtml::listData(LoanType::model()->findAll, 'id', 'name')); ?>
    <?php echo $form->error($model,'UserLoanTypes'); ?>
</div>

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

相关问题