你有一个页面ActiveForm作为主记录,网格作为子记录,我如何在它们之间建立关系。在创建时,主记录没有id!任何建议都很好! TIA。阿西
答案 0 :(得分:0)
无需使用模态来添加子对象。你可以用一种形式做到这一点。如果使用模态,则需要首先创建父对象,然后允许显示此模态。通过这种方式,您的担忧将无效。
如果要在一个表单中添加父项和子项,可以将两个对象都传递给视图,然后将其字段放在表单中。然后在表单提交上,验证两个对象,然后如果一切正常,则保存父项,然后保存子项,将父项ID分配给子项。您可以在事务中执行此操作,以便在子项失败时,父项也不会被记录,反之亦然。
以下是一些代码:
class YourController extends Controller
{
public function actionSomething()
{
$parent = new Parent();
$child = new Child();
$request = Yii::$app->request;
if ($parent->load($request->post('Parent')) && $child->load($request->post('Child'))) {
// Do validation and if everything is fine, then save the fields
Yii::$app->db->transaction(function() {
$parent->save(false);
$child->parent_id = $parent->id;
$child->save(false);
});
}
return $this->render('view', compact('parent', 'child'));
}
}
观点:
$form = ActiveForm::begin() ?>
<?= $form->field($parent, 'fieldA') ?>
<?= $form->field($parent, 'fieldB') ?>
<?= $form->field($child, 'fieldA') ?>
<?= $form->field($child, 'fieldB') ?>
...other input fields...
<?= Html::submitButton('Save', ['class' => 'btn btn-primary']) ?>
你明白了吗?如果您有任何疑问或问题,请询问。这是另一个例子。这是一个更新,但想法是一样的: