Обновите две модели разных баз данных с одним представлением в yii
У меня есть представление (_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/
1 ответ
Этот код на самом деле должен работать, но это плохо.
Я предполагаю, что вы вообще не понимаете, что такое модель и что она делает в Yii, а также как визуализировать и создавать формы.
Я постараюсь объяснить, как это должно быть.
1-й из всех не использовать 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=>$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) или сформировать массив и вытолкнуть его из массива.