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 の実践はありますか?? 検証が必要なため、編集中などにフォームを選択したままにします。これを行う方法を教えてもらえますか? または、リンクの例を教えてください。グーグルで検索しましたが、役に立ちませんでした。

ありがとう。


データベースにデータを保存できました。編集中に、3 番目のテーブル (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 を 1 人のユーザーに割り当てる必要がない場合は、そのほうが簡単です。必要なのは、フォームの視覚化のための 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(); ?>
于 2012-06-19T12:42:52.997 に答える