如何将网格引用到ActiveForm

时间:2016-12-04 07:14:06

标签: yii2 master-detail

你有一个页面ActiveForm作为主记录,网格作为子记录,我如何在它们之间建立关系。在创建时,主记录没有id!任何建议都很好! TIA。阿西

1 个答案:

答案 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']) ?>

你明白了吗?如果您有任何疑问或问题,请询问。这是另一个例子。这是一个更新,但想法是一样的:

Getting Data for Multiple Models