Php 如何在Yii中以一种形式修改两个数据库表
我已经从我的网站页面创建了一个表单,在我的数据库中eddit一个表(hotel_rooms),它可以正常工作。 但是我需要在私有表(hotel_rooms)的edditing网页中包含另一个表(hotel_rooms_checked)中的一些字段,而不是所有的表 请问我怎么做?其中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 */
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, //!
));
}