一种形式和多种模式

时间:2012-02-03 02:12:20

标签: yii

我正在使用Yii Framework。

目的:获取用户输入并将数据插入到一个表单上的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 个答案:

答案 0 :(得分:1)

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

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

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

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