一个表格和多个模型

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

我正在使用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,

    ));
}

views / order / 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)); ?>

views / order / _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 -->
yii
1个回答
1
投票

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

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

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

        $modelTwo = new ModelTwo();
        $modelTwo->save();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.