Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Yii中以一种形式修改两个数据库表_Php_Database_Forms_Yii - Fatal编程技术网

Php 如何在Yii中以一种形式修改两个数据库表

Php 如何在Yii中以一种形式修改两个数据库表,php,database,forms,yii,Php,Database,Forms,Yii,我已经从我的网站页面创建了一个表单,在我的数据库中eddit一个表(hotel_rooms),它可以正常工作。 但是我需要在私有表(hotel_rooms)的edditing网页中包含另一个表(hotel_rooms_checked)中的一些字段,而不是所有的表 请问我怎么做?其中hotel\u rooms.Id=hotel\u rooms\u checked.Id 这是表格的代码 <?php /* @var $this HotelRoomsController */

我已经从我的网站页面创建了一个表单,在我的数据库中eddit一个表(hotel_rooms),它可以正常工作。 但是我需要在私有表(hotel_rooms)的edditing网页中包含另一个表(hotel_rooms_checked)中的一些字段,而不是所有的表 请问我怎么做?其中
hotel\u rooms.Id=hotel\u rooms\u checked.Id
这是表格的代码

    <?php
    /* @var $this HotelRoomsController */
    /* @var $model HotelRooms */
    /* @var $form CActiveForm */
    ?>

    <div class="form">

    <?php $form=$this->beginWidget('CActiveForm', array(
        'id'=>'hotel-rooms-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,'Id'); ?>
            <?php echo $form->textField($model,'Id',array('size'=>60,'maxlength'=>255)); ?>
            <?php echo $form->error($model,'Id'); ?>
        </div>

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

    </div><!-- form -->
查看代码为

<?php
/* @var $this HotelRoomsController */
/* @var $model HotelRooms */

$this->breadcrumbs=array(
    'Hotel Rooms'=>array('index'),
    $model->Id,
);

$this->menu=array(
    array('label'=>'List HotelRooms', 'url'=>array('index')),
    array('label'=>'Create HotelRooms', 'url'=>array('create')),
    array('label'=>'Update HotelRooms', 'url'=>array('update', 'id'=>$model->Id)),
    array('label'=>'Delete HotelRooms', 'url'=>'#', 'linkOptions'=>array('submit'=>array('delete','id'=>$model->Id),'confirm'=>'Are you sure you want to delete this item?')),
    array('label'=>'Manage HotelRooms', 'url'=>array('admin')),
);
?>

<h1>View Room : <?php echo $model->Id; ?></h1>

<?php $this->widget('zii.widgets.CDetailView', array(
    'data'=>$model,
    'data'=>$model2,
    'attributes'=>array(
        'Id',
        'HotelName',
        'HotelRoomsType',
        ....
    ),
)); ?>

这个问题似乎还不够清楚。不过我会试着猜你想要什么

对于
视图
,只需添加其他
模型的字段
(我想您已经为
酒店房间创建了一个模型


只需从控制器传递两个模型:

public function actionUpdate($id)
{
    $model=$this->loadModel($id);

    // assuming second model has same ID. Modify $id accordingly
    $model2=HotelRoomsChecked::model()->findByPk($id);

    if(isset($_POST['HotelRooms']) && isset($_POST['HotelRoomsChecked'])) //!
    {
        $model->attributes=$_POST['HotelRooms'];
        $model2->attributes=$_POST['HotelRoomsChecked']; //!

        if($model->save() && $model2->save()) //!
            $this->redirect(array('hotels/index','id'=>$model->Id));
    }

    $this->render('update',array(
        'model'=>$model,
        'model2'=>$model2, //!
    ));
}

只需在表单中使用第二个模型,方法与您在问题中发布的方法相同。

Thans对于重播,我尝试了它,但我有一个错误:未定义变量:model2即使在添加'model2'=>$model2之后,仍然会出现相同的错误,\u form是视图文件。无论如何,请您尝试在控制器中的“$model2=HotelRoomsChecked::model()->findByPk($id);”之后添加几行代码:if($model2==null)echo“missing”;否则回声“好”;要查看$model2是否正确实例化?哦,我刚刚发现您在视图文件中使用了“CDetailView”。“CDetailView”用于显示单个模型的详细信息。这可能就是你出错的原因。尝试对$model2使用另一个CDetailView。最后,我发现错误来自何处我忘了在更新中添加model2,并创建了如下文件:echo$this->renderPartial(“\u form',array('model'=>$model,'model2'=>$model2));?>谢谢你的重播,我试过了,但我有一个错误:未定义变量:model2错误在表单代码中,我在表单代码的第一行添加了/*@var$model2 HotelRoomsChecked*/这就是我得到的对象(HotelRoomsChecked)[89]private'\u md'(CActiveRecord)=>object(CActiveRecordMetaData)[67]public'tableSchema'=>object(CMysqlTableSchema)[68]public'schemaName'=>null public'name'=>string'hotek_rooms\u checked'(长度=12)public'rawName'=>string'
hotek_rooms\u checked
'(长度=14)public'primaryKey'=>string'Id'(长度=2)公共“sequenceName”=>空公共“foreignKeys”=>数组(大小=0).

Hotel_Rooms
Id
HotelName
HotelRoomsType
.....

Hotel_Rooms_Checked
Id
DateCheckedIn
DateCheckedOut
....
<?php
    /* @var $this PropUnitController */
    /* @var $model HotelRooms */
    /* @var $model2 HotelRoomsChecked */
    /* @var $form CActiveForm */
    ?>

    <div class="form">

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

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

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

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

        <!--for example, let's say we have an attribute `status` for HotelRoomsChecked-->
        <div class="row">
            <?php echo $form->labelEx($model2,'status'); ?>
            <?php echo $form->textField($model2,'status',array('size'=>60,'maxlength'=>255)); ?>
            <?php echo $form->error($model2,'status'); ?>
        </div>

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

    </div><!-- form -->
public function actionUpdate($id)
    {
        $model=$this->loadModel($id);
        $model2 = HotelRoomsChecked::model()->findByPk($id);

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

        if(isset($_POST['HotelRooms']) && isset($_POST['HotelRoomsChecked']))
        {
            $model->attributes=$_POST['HotelRooms'];
            $model2->attributes = $_POST['HotelRoomsChecked'];
            $valid = $model->validate();
            $valid = $valid && $model2->validate();

            if($valid) {
        // $this->redirect(Yii::app()->request->urlReferrer);
                $model->save();
                $model2->save();
                $this->redirect(array('hotels/index','id'=>$model->Id));
            }
        }

        $this->render('update',array(
            'model'=>$model,
            'model2' => $model2,
        ));
    }
public function actionUpdate($id)
{
    $model=$this->loadModel($id);

    // assuming second model has same ID. Modify $id accordingly
    $model2=HotelRoomsChecked::model()->findByPk($id);

    if(isset($_POST['HotelRooms']) && isset($_POST['HotelRoomsChecked'])) //!
    {
        $model->attributes=$_POST['HotelRooms'];
        $model2->attributes=$_POST['HotelRoomsChecked']; //!

        if($model->save() && $model2->save()) //!
            $this->redirect(array('hotels/index','id'=>$model->Id));
    }

    $this->render('update',array(
        'model'=>$model,
        'model2'=>$model2, //!
    ));
}