2012-02-03 61 views
0

我正在使用Yii框架。一个表单和多个模型

目的:获取用户输入并将数据插入到表格OrderOrderDetail中。问题是数据仅插入到Order表中。我试图遵循wiki教程,但我无法解决这个问题。

为什么我不能将数据插入到两个表中,即OrderOrderDetail

我有五款车型:

Customers(customer_id, customer_name, phone, email, lat, lng, ...) 
Products(product_id, product_name,price, ...) 
Order(order_id,customer_id, order_status, staff_id, ...) 
OrderDetail(order_detail_id, order_id,product_id, qty, ...) 
Staff(staff_id, staff_name, ...) 

OrderController.php

public function actionCreate() 
{ 
    $model=new Order; 
    $orderdetail=new OrderDetail(); 
    $product=new Products(); 

    $date=date('y-m-d'); 

    // Uncomment the following line if AJAX validation is needed 
    //$this->performAjaxValidation(array($model,$orderdetail)); 

    if(isset($_POST['Order'])) 
    { 

     $model->attributes=$_POST['Order']; 
      $model->lat='12.53'; 
      $model->lng='13.2'; 
      $model->completed_date=$date; 
      $model->received_date=$date; 
      $model->created_date=$date; 
      $model->upated_date=$date; 



     if($model->save()) 

     if(isset($_POST['OrderDetail'])){ 
     $orderdetail->attributes=$_POST['OrderDetail']; 
     $orderdetail->order_id= $model->order_id; 
     $orderdetail->order_item_status=1; 
     $orderdetail->created_date=$date; 
     $orderdetail->updated_date=$date; 

     if($orderdetail->save()) 
     $this->redirect(array('view','id'=>$model->order_id)); 
     } 

      //$OrderDetailController=new OrderDetail(); 
      //$this->redirect(array('OrderDetail/create')); 
    } 
    $this->render('create',array(
     'model'=>$model, 
     'orderdetail'=>$orderdetail, 
     'product'=>$product, 

    )); 
} 

的意见/顺序/ create.php

<?php 
$this->breadcrumbs=array(
    'Orders'=>array('index'), 
    'Create', 
); 

$this->menu=array(
    array('label'=>'List Order', 'url'=>array('index')), 
    array('label'=>'Manage Order', 'url'=>array('admin')), 
); 
?> 

<h1>Create Order</h1> 

<?php echo $this->renderPartial('_form', array('model'=>$model,'orderdetail'=>$orderdetail,'product'=>$product)); ?> 

的意见/顺序/ _form.php这个

<div class="form"> 

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'order-form', 
    'enableAjaxValidation'=>false, 
)); ?> 

    <p class="note">Fields with <span class="required">*</span> are required.</p> 

    <?php echo $form->errorSummary($model); ?> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'customer_id'); ?> 
     <?php //echo $form->textField($model,'customer_id'); ?> 
     <?php echo $form->dropDownList($model,'customer_id',CHtml::listData(Customers::model()->findAll(),'customer_id','fullname'), 
     array('empty' => '--- Choose---')); ?> 
     <?php echo $form->error($model,'customer_id'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'order_status'); ?> 
     <?php echo $form->textField($model,'order_status'); ?> 
<?php //echo $form->dropDownList($model,'order_id', array(1=>'Pending', 2=>'Processing',3=>'Completed'));?> 

     <?php echo $form->error($model,'order_status'); ?> 
    </div> 

<?php /*?> 
    <div class="row"> 
     <?php echo $form->labelEx($model,'lat'); ?> 
     <?php echo $form->textField($model,'lat'); ?> 
     <?php echo $form->error($model,'lat'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'lng'); ?> 
     <?php echo $form->textField($model,'lng'); ?> 
     <?php echo $form->error($model,'lng'); ?> 
    </div> 
<?php */?> 
    <div class="row"> 
     <?php echo $form->labelEx($model,'address'); ?> 
     <?php echo $form->textField($model,'address',array('size'=>60,'maxlength'=>255)); ?> 
     <?php echo $form->error($model,'address'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx(Products::model(),'product_id'); ?> 
     <?php //echo $form->textField($model,'product_id'); ?> 
     <?php echo $form->dropDownList(Products::model(),'product_id',CHtml::listData(Products::model()->findAll(),'product_id','product_name'), 
     array('empty' => '--- Choose---')); ?> 
     <?php echo $form->error(Products::model(),'product_id'); ?> 
    </div> 
    <div class="row"> 
     <?php echo $form->labelEx(OrderDetail::model(),'qty'); ?> 
     <?php echo $form->textField(OrderDetail::model(),'qty'); ?> 
     <?php echo $form->error(OrderDetail::model(),'qty'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'received_date'); ?> 
     <?php echo $form->textField($model,'received_date'); ?> 
     <?php echo $form->error($model,'received_date'); ?> 
    </div> 
<?php /*?> 
    <div class="row"> 
     <?php echo $form->labelEx($model,'completed_date'); ?> 
     <?php echo $form->textField($model,'completed_date'); ?> 
     <?php echo $form->error($model,'completed_date'); ?> 
    </div> 
<?php */?> 
    <div class="row"> 
     <?php echo $form->labelEx($model,'staff_id'); ?> 
     <?php //echo $form->textField($model,'staff_id'); ?> 
     <?php echo $form->dropDownList($model,'staff_id',CHtml::listData(Staff::model()->findAll(),'staff_id','fullname'), 
     array('empty' => '--- Choose---')); ?> 
     <?php echo $form->error($model,'staff_id'); ?> 
    </div> 

<?php /*?> 
    <div class="row"> 
     <?php echo $form->labelEx($model,'created_date'); ?> 
     <?php echo $form->textField($model,'created_date'); ?> 
     <?php echo $form->error($model,'created_date'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'upated_date'); ?> 
     <?php echo $form->textField($model,'upated_date'); ?> 
     <?php echo $form->error($model,'upated_date'); ?> 
    </div> 
<?php */?> 



    <div class="row buttons"> 
     <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?> 
    </div> 

<?php $this->endWidget(); ?> 

</div><!-- form --> 

回答

1

处理两个模型的表单...创建一个表单,其中包含两个模型的所有属性,然后在表单发布并有效时在视图中将属性保存到两个模型中。

if(isset($_POST['ModelOneAndModelTwoForm'])) 
{ 
    $form->attributes=$_POST['ModelOneAndModelTwoForm']; 

    if($form->validate()) 
    { 
     $modelOne = new ModelOne(); 
     $modelOne->save(); 

     $modelTwo = new ModelTwo(); 
     $modelTwo->save(); 
    } 
} 
+0

非常感谢您的回答。 – sakkona 2012-02-06 04:16:51

相关问题