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