yii以表格形式管理子表的数据

时间:2012-06-19 12:12:52

标签: php yii

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

用户名:[文本框]

电子邮件:[文本框]

地址:[文字区]

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

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

状态[是/否]

现在我有3个型号:

1)用户(用户数据)

2)LoanType(仅适用于贷款类型清单)

3)UserLoanType(用户和贷款类型之间的映射)

所有3个模型都有HAS_MANY和BELONGS_TO关系,就像我们在YII中一样。

现在,当用户点击注册按钮时,我也希望将数据保存在user_loan_type表中。我可以简单地在actionCreate中添加核心php逻辑。但是,有没有任何标准的YII练习?因为我需要验证,在编辑期间保留选择的表格等。任何人都可以指导我如何做到这一点吗?或者指出任何示例链接,我用Google搜索但没有帮助。

感谢。


我可以在数据库中保存数据, 现在在编辑期间,我想要检索第3个表(tbl_user_loan_request_type)数据。我使用了下面的代码。

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

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

2 个答案:

答案 0 :(得分: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')),
        ),
     ),
   )); ?>

答案 1 :(得分:0)

如果您不需要为一个用户分配多个loanType,则会更容易。您只需要表单可视化的用户模型:

<?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(); ?>