これは、Yii Framework を使った私の最近の演習に関連する初心者向けの質問です。
データベースに次の構造があります。
CREATE TABLE location(
id INTEGER PRIMARY KEY NOT NULL,
location TEXT);
CREATE TABLE parameter(
id INTEGER PRIMARY KEY NOT NULL,
name TEXT,
value TEXT);
CREATE TABLE temperature(
id INTEGER PRIMARY KEY NOT NULL,
locationId INTEGER,
value REAL NOT NULL,
createDate DATETIME NOT NULL,
FOREIGN KEY(locationId) REFERENCES location(id));
CREATE INDEX idx1_temperature ON temperature (createDate);
グリッド内の両方のデータを含むビューを作成しようとしていますが、 -tablelocation
の特定の値を変更する機能も備えています。実際には、 whereparameter
を変更する可能性に加えて、グリッド内のすべての可能な場所のリストがあります。parameter.value
parameter.name="CURRENT_LOCATION"
私がこれまでに得たものは次のとおりです。
location/admin.php
ビューの生成:
...
<h2>Change current location</h2>
<?php echo $this->renderPartial('_para', array('model'=>Parameter::model()->find('name="current_location"'))); ?>
<h2>Modify locations</h2>
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'location-grid',
'dataProvider'=>$model->search(),
'columns'=>array(
'location',
array(
'class'=>'CButtonColumn',
),
),
));
...
location/_para.php
フォームを埋め込む場合:
<?php
/* @var $this ParameterController */
/* @var $model Parameter */
/* @var $form CActiveForm */
?>
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'parameter-form',
'enableAjaxValidation'=>false,
)); ?>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->labelEx($model,'value'); ?>
<?php //echo $form->textField($model,'value'); ?>
<?php echo $form->dropDownList($model,'value',CHtml::listData(Location::model()->findAll(), 'id', 'location')); ?>
<?php echo $form->error($model,'value'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton('Save'); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
したがって、必要なのは、特定の行を保存(=更新)することparameter
ですが、正しくないようです。これまでにデバッグしたところ、Submit ボタンによって Location-controller の actionAdmin-function が実行されるようです。Location の代わりに Parameter-record を保存するように指示できれば、それで問題ありません。LocationController.php の actionAdmin 関数は次のとおりです。
public function actionAdmin()
{
$model=new Location('search');
$model->unsetAttributes(); // clear any default values
if(isset($_GET['Location']))
{
$model->attributes=$_GET['Location'];
}
if(isset($_POST['Parameter']))
{
$model->attributes=$_POST['Parameter'];
if($model->save())
{
$this->redirect(array('view','id'=>$model->id));
}
}
$this->render('admin',array(
'model'=>$model,
));
}
マルチモデルフォームなどをカバーする投稿をよく見かけますが、これを理解することはできません. 私がこれを完全に間違った方法で達成しようとしている可能性が非常に高いです。だから、正しい方向に私を殴ってください。