Yii2-创建新对象时将固定数据保存在第二个表中

Yii2-创建新对象时将固定数据保存在第二个表中,yii2,yii2-advanced-app,Yii2,Yii2 Advanced App,我有两个表“项目”和“任务”。它们相互关联。 在创建新项目时,我想在保存模型时创建并保存三个相关的任务(带有一些固定的前缀信息) 在“tasks”表中,我只想保存与已创建项目的关系以及预定义的“task_description” 我在这里迷路了,希望有人能帮我。如果你还需要什么,请告诉我 控制器 Projectscontroller.php 模型Projects.php 您可以在项目的afterSave方法中创建任务: public function afterSave($insert, $ch

我有两个表“项目”和“任务”。它们相互关联。 在创建新项目时,我想在保存模型时创建并保存三个相关的任务(带有一些固定的前缀信息)

在“tasks”表中,我只想保存与已创建项目的关系以及预定义的“task_description”

我在这里迷路了,希望有人能帮我。如果你还需要什么,请告诉我

控制器 Projectscontroller.php

模型Projects.php


您可以在项目的afterSave方法中创建任务:

public function afterSave($insert, $changedAttributes)
{
    if ($insert) {
        // create your tasks
    }
    return parent::afterSave($insert, $changedAttributes);
}

你可以使用下面的方法

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,
        ]);
    }
}

基本上,在project保存到DB中之后,您正在保存任务。

您从未添加要提交的表单,您是如何填充两个模型的字段的?您使用的是
FormModel
还是
ActiveRecord
显然,您只是将
project
模型传递到view.thx以获取您的评论。是的只是传递了它。没有办法思考如何解决问题,所以我发布了代码,没有做任何更改,我试图解决它。Thx@jmsds。这一个非常完美。如此简单,我没有理解。如果你从应用程序中的其他地方创建项目,这会很快给你带来麻烦。我只有两个入口点来创建项目。两者都引用相同的操作“创建”在projectscontroller中。同样,我没有得到它。什么会导致麻烦?我想你的意思是,当我创建一个不使用此操作的项目时?所以我必须在另一个操作中重用代码以避免问题?很抱歉,问题不是那么聪明,但对Yii和php等还是有点陌生。@Magpie。很高兴你能够实现它。
public function afterSave($insert, $changedAttributes)
{
    if ($insert) {
        // create your tasks
    }
    return parent::afterSave($insert, $changedAttributes);
}
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,
        ]);
    }
}