2012-06-19 15 views
1

我正在研究YII框架,我是一個新手。 我有用戶登記表格如下所示:yii管理表格中的子表格數據

用戶名:[文本框]

電子郵件:[文本框]

地址:[文本區域]

用戶貸款類型:(複選框列表作爲下文)

  • 貸款類型1
  • 貸款類型2
  • 貸款類型3
  • 貸款類型4
  • 貸款類型5

狀態[是/否]

現在我有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); 

但它給了我空白數組。 我在哪裏錯了?

回答

1

U可限定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> 

鑑於U可以:

<?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

混合框架內工作時createCommand和的CActiveRecord是不是最好的方法:S – sucotronic

+0

@sucotronic,我更新了我的答案 – Sergey

+0

而不是使用deleteAll方法,你可以定義新的關係來訪問UserLoanType行,並刪除它們中的每一個:) – sucotronic

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