yii管理子表的数据形式。

问题描述 投票:1回答:2

我正在使用YII框架,我是一个新手,我有一个用户注册表,如下所示。

用户名: [Textbox]

电子邮件。[文本框]

地址: [文字区域]

用户贷款类型。(以下为复选框列表)

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

状态 [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);

但它给我的是一个空白数组,我错在哪里?

php yii
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')),
        ),
     ),
   )); ?>

0
投票

如果你不需要将多个贷款类型分配给一个用户,那会更容易。你所需要的只是表单可视化的用户模型。

<?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(); ?>
© www.soinside.com 2019 - 2024. All rights reserved.