我有一个视图(_form.php),其中包含字段(名称,摘要)提交按钮。如果我点击提交按钮,它应该更新一个模型的名称字段和另一个模型的摘要字段。这些模型是不同的数据库。 任何人都可以帮助这个。我为此尝试了以下内容 在 _form.php(测试)
<?php echo $form->labelEx($model, ‘name’); ?>
<?php echo $form->textField($model, ‘name’, array(‘size’ => 60, ‘maxlength’ => 250)); ?>
<?php echo $form->error($model, ‘name’); ?>
<?php echo $form->labelEx(Test1::model(), ‘summary’); ?>
<?php echo $form->textField(Test1::model(), ‘summary’, array(‘size’ => 60, ‘maxlength’ => 250)); ?>
<?php echo $form->error(Test1::model(), ‘summary’); ?>
<?php echo CHtml::submitButton($model->isNewRecord ? ‘Create’ : ‘Save’); ?>
在 TestController.php
中public function actionCreate() {
$model = new Test;
if (isset($_POST['Test'])) {
$model->attributes = $_POST['Test'];
if ($model->save()) {
$modeltest1 = new Test1;
$modeltest1->attributes = $_POST['Test1'];
$modeltest1->Id = $model->Id;
if ($modeltest1->save())
$this->redirect(array('view', 'Id' => $model->Id));
}
}
$this->render('create', array(
'model' => $model,
));
}
此代码无效。如何使其适用于不同的数据库。我按照以下链接进行了此操作。
http://www.yiiframework.com/wiki/291/update-two-models-with-one-view/
答案 0 :(得分:0)
这段代码实际上应该可行,但不好。
我假设您根本不了解什么是模型以及它在Yii中的作用,以及如何渲染和创建表单。
我会尝试解释它应该如何。
首先不要在视图中使用Test::model()
,除非你想从中调用一些函数(但试着避免它)。它可以通过从控制器传递来完成:
public function actionCreate() {
$model_name = new Name;
$model_summary=new Summary;
//something here
$this->render('create', array(
'name' => $model_name,
'summary'=>$model_summary,
));
}
进行渲染时,将变量传递给视图(name_in_view =&gt; $ variable)
第二。在您的视图中,您可以使用变量。
<?php echo $form->labelEx($name, ‘name’);
echo $form->textField($name, ‘name’, array(‘size’ => 60, ‘maxlength’ => 250));
echo $form->error($name, ‘name’);
echo $form->labelEx($summary, ‘summary’);
echo $form->textField($summary, ‘summary’, array(‘size’ => 60, ‘maxlength’ => 250)); ?>
echo $form->error($summary, ‘summary’); ?>
echo CHtml::submitButton($model->isNewRecord ? ‘Create’ : ‘Save’); ?>
第三。你需要了解什么是模型。在这种情况下,它是扩展CActiveRecord的类。您在控制器中的代码应该像:
public function actionCreate() {
$model_name = new Name;
$model_summary=new Summary;
if (isset($_POST['Name']))
$model_name->attributes=$_POST['Name'];
if (isset($_POST['Summary']))
$model_name->attributes=$_POST['Summary'];
if ($model_name->save()&&$model_summary->save())
$this->redirect(array('view', 'Id' => $model->Id));
$this->render('create', array(
'name' => $model_name,
'summary'=>$model_summary,
));
}
$model->attributes=$_POST[]
这里是属性的批量分配,因此它们必须在规则中是安全的。您总是可以用手分配属性(1乘1),或者形成一个数组并从阵列中推送它。