我正在使用YII框架,我是一个新手,我有一个用户注册表,如下所示。
用户名: [Textbox]
电子邮件。[文本框]
地址: [文字区域]
用户贷款类型。(以下为复选框列表)
状态 [yesno]
现在我有3个模型。
1) 用户(用于用户数据
2)贷款类型(只用于贷款类型列表)
3)UserLoanType(用户和贷款类型之间的映射)。
这3个模型都有HAS_MANY和BELONGS_TO的关系,就像我们一般在YII中做的那样。
现在当用户点击注册按钮时,我想把数据也保存在user_loan_type表中。我可以简单的在actionCreate中添加核心的php逻辑。但是有什么标准的YII做法吗?因为我需要验证,在编辑过程中保持表单选择等。有谁能指导我怎么做吗?或者给我指出任何例子链接,我已经google了,但没有帮助。
谢谢。
我能够在数据库中保存数据,现在在编辑过程中,我想检索第三张表的(tbl_user_loan_request_type)数据。我已经使用了下面的代码。
$user = User::model()->findByPk(5);
print_r($user->UserLoanTypes);
但它给我的是一个空白数组,我错在哪里?
你可以在你的类中定义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')),
),
),
)); ?>
如果你不需要将多个贷款类型分配给一个用户,那会更容易。你所需要的只是表单可视化的用户模型。
<?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(); ?>