#php #database #yii2
#php #База данных #yii2
Вопрос:
Я не могу вставить данные в базу данных. Я использую yii2 advanced.
У меня есть 3 таблицы: таблица пользователя по умолчанию, post и category. У каждого сообщения есть одна категория, а в одной категории может быть много сообщений. Но когда я нажимаю «Сохранить» в своей форме создания — ничего не происходит, страница просто обновляется. Таблица post по-прежнему пуста.
Вот PostController
namespace frontendcontrollers;
use Yii;
use yiiwebController;
use frontendmodelsCreateForm;
use frontendmodelsCategory;
use yiihelpersArrayHelper;
class PostController extends Controller
{
public function actionCreate()
{
if(Yii::$app->user->isGuest)
{
return $this->redirect(['/site/login']);
}
$model = new CreateForm();
$category = Category::find()->all();
$items = ArrayHelper::map($category, 'id', 'name');
if ($model->load(Yii::$app->request->post()))
{
if ($model->save())
{
Yii::$app->session->setFlash(
'success',
true
);
return $this->refresh();
} else
{
Yii::$app->session->setFlash(
'success',
false
);
}
}
return $this->render('create', [
'model' => $model,
'items' => $items
]);
}
Это модель CreateForm
namespace frontendmodels;
use yiibaseModel;
use frontendmodelsPost;
use Yii;
class CreateForm extends Model
{
public $category;
public $title;
public $content;
public function attributeLabels()
{
return [
'category' => 'Category',
'title' => 'Title',
'content' => 'Content',
];
}
public function save()
{
$post = new Post();
$post->user_id = Yii::$app->user->id;
$post->category_id = $this->category;
$post->title = $this->title;
$post->content = $this->content;
$post->created_at = time();
}
}
И это представление
use yiibootstrapActiveForm;
use yiibootstrapHtml;
$form = ActiveForm::begin();
echo $form->field($model, 'category')->dropDownList($items);
echo $form->field($model, 'title')->textInput();
echo $form->field($model, 'content')->textInput();
echo Html::submitButton('Save', ['class' => 'btn btn-primary']);
ActiveForm::end();
Что я делаю не так, я не могу понять
Комментарии:
1. Ваш метод
save
вCreateForm
не сохраняет новое сообщение, просто присваивает значения. Вы также можете добавить правила проверкиCreateForm
. Прочитайте Создание форм и проверку ввода в руководстве.2. Вы использовали Gii ? Gii может генерировать то, что вы хотите. Но без использования yii base Model
Ответ №1:
ОК. Все, что мне нужно было сделать, это добавить $post->save()
в конце моего метода сохранения в CreateForm.