Как решить проблему при вставке данных в базу данных, Yii2?

#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.