Yii2 - сохранение фиксированных данных во второй таблице при создании нового объекта

У меня есть две таблицы "проекты" и "задачи". Они связаны друг с другом. При создании нового проекта я хочу создать и сохранить также три связанные задачи (с некоторой фиксированной предварительно заполненной информацией) при сохранении модели.

В таблице "задачи" я просто хочу сохранить отношение к созданному проекту и "task_description", которое предопределено.

Я потерян здесь и надеюсь, что кто-нибудь может мне помочь. Если вам нужно что-то еще, дайте мне знать.

КОНТРОЛЛЕРProjectscontroller.php

public function actionCreate()
{
    $model = new Projects();

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['index']);
    } elseif (Yii::$app->request->isAjax) {
        return $this->renderAjax('_form', [
            'model' => $model
    ]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

МОДЕЛЬ Projects.php

public function getTasks()
{
    return $this->hasMany(Tasks::className(), ['parent_id' => 'id']);
}

2 ответа

Решение

Вы можете использовать что-то вроде ниже

public function actionCreate()
{
    $model = new Projects();

    if ($model->load(Yii::$app->request->post()) && $model->save()) {

        $taskmodel=new YourTaskModel();
        $taskmodel->project_id=$model->id;    // will get inserted project id
        $taskmodel->task_description='whateverdescription';
        $taskmodel->save();

        return $this->redirect(['index']);
    } elseif (Yii::$app->request->isAjax) {
        return $this->renderAjax('_form', [
            'model' => $model
        ]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

В основном вы сохраняете задачу после сохранения проекта в БД.

Вы можете создавать задачи в методе afterSave вашего проекта:

public function afterSave($insert, $changedAttributes)
{
    if ($insert) {
        // create your tasks
    }
    return parent::afterSave($insert, $changedAttributes);
}
Другие вопросы по тегам