Yii2高级显示和保存一个表格中两个表的字段

时间:2016-04-28 02:04:50

标签: database relational-database relationship yii2-advanced-app

如何在一个表单中显示不同表的字段并在数据库中一次保存...场景是当我收到一个新表单时,这两个表将合并在同一个FORM中并可能保存同时。第二个问题是,“形式”的“id”(PK)将在保存后逐步生成数字。问题是如何在保存时将“形式”中“id”(PK)的值复制到“forminfo_info”(FK)...请在这方面提供帮助..

enter image description here

1 个答案:

答案 0 :(得分:0)

你的很多问题都得到了解释here in the Yii2 guide

无论如何,这是我在actionUpdate / actionCreate-controller中尝试的内容。 (注意:此代码未经过测试,因此可能需要一些修复,但总体结构应该有效。)

// Create empty models, typically for actionCreate()
$m1 = new Model();
$m2 = new AnotherModel();

// ...or load models using ids for actionUpdate($m1Id, $m2Id)
$m1 = Model::findOne($m1Id);
$m2 = AnotherModel::findOne($m2Id);

// Try to populate the models from the request
if ($m1->load(Yii::$app->request->post()) && $m2->load(Yii::$app->request->post())) {
    // Models now loaded, but not validated
    if ($m1->validate() && $m2->validate()) {
         // Both models are now validated, save the first one
         $m1->save(false);    // No need to validate again
         // Now Model has an id, save its id as a reference in AnotherModel
         $m2->m1Id = $m1->id;
         // ...or create a method in your Model-model for setting the foreign key
         // $m2->connectModel($m1);  // The fancier object oriented way
         $m2->save(false);   // Set true if you validate the foreign key
    }
}

// Return view for rendering

如果两个保存操作中的任何一个失败(未在代码中测试),那可能是应该处理的致命错误。最糟糕的情况是,最终可能会保存一个模型而不是另一个模型,尽管如果验证通过则不太可能。查看" atomic"的交易保存(全部或全部保存),如果您的数据库支持它,或者只是保留它(我想大多数只是保留它或记录错误以供以后使用)。