6

Yii で 1 つのフォームだけを使用して複数のレコードを追加する方法を知っている人はいますか? すべてのレコードは同じモデルに属し、同じ形式です。

どうもありがとう、

ニック

4

2 に答える 2

9

ガイドの「 batchUpdate」と同等の「batchCreate」メソッドは、次のようになります。

public function actionBatchCreate() {
    $models=array();
    // since you know how many models
    $i=0;
    while($i<5) {
        $models[]=Modelname::model();
        // you can also allocate memory for the model with `new Modelname` instead
        // of assigning the static model
    }
    if (isset($_POST['Modelname'])) {
        $valid=true;
        foreach ($_POST['Modelname'] as $j=>$model) {
            if (isset($_POST['Modelname'][$j])) {
                $models[$j]=new Modelname; // if you had static model only
                $models[$j]->attributes=$model;
                $valid=$models[$j]->validate() && $valid;
            }
        }
        if ($valid) {
            $i=0;
            while (isset($models[$i])) {
                $models[$i++]->save(false);// models have already been validated
            }
            // anything else that you want to do, for example a redirect to admin page
            $this->redirect(array('modelname/admin'));
        }
    }

    $this->render('batch-create-form',array('models'=>$models));
}

ここでの唯一の懸念事項は、保存するモデルごとに、 を使用して新しいインスタンスnew作成する必要があることです。残りのロジックは、任意の方法で実装できます。たとえば、上記の例では、すべてのモデルが検証されてから保存されますが、モデルが無効な場合は検証を停止するか、モデルを直接保存することができます。呼び出し中に検証が行われるようにしsaveます。したがって、ロジックは実際にはアプリの ux に依存します。

于 2012-10-28T13:59:09.207 に答える