1

我正在研究 YII 框架,我是新手。我有如下所示的用户注册表单:

用户名:[文本框]

电子邮件:[文本框]

地址:【文字区】

用户贷款类型:(复选框列表如下)

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

状态[是/否]

现在我有 3 个模型:

1) 用户(用于用户数据)

2) LoanType(仅用于贷款类型列表)

3)UserLoanType(用户与贷款类型的映射)

正如我们通常在 YII 中所做的那样,所有 3 个模型都有 HAS_MANY 和 BELONGS_TO 关系。

现在,当用户单击注册按钮时,我也想将数据保存在 user_loan_type 表中。我可以简单地在 actionCreate 中添加核心 php 逻辑。但是有没有任何标准的 YII 实践呢?因为我需要验证,所以在编辑等过程中保持表单处于选中状态。谁能指导我如何做到这一点?或者指向我任何示例链接,我已经用谷歌搜索但没有帮助。

谢谢。


我能够将数据保存在数据库中,现在在编辑期间我想检索第三张表的(tbl_user_loan_request_type)数据。我使用了下面的代码。

$user = User::model()->findByPk(5); 
    print_r($user->UserLoanTypes);

但它给了我空白数组。我哪里错了??

4

2 回答 2

1

您可以在类中定义 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')),
        ),
     ),
   )); ?>
于 2012-06-19T12:38:44.490 回答
0

如果您不需要将多个loanTypes 分配给一个用户,那会更容易。您只需要用于表单可视化的用户模型:

<?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(); ?>
于 2012-06-19T12:42:52.997 回答