2016-12-04 5 views
-1

1つのページにActiveFormをマスターレコードとして、グリッドを子レコードとして、どのように関係を作ることができますか?作成時にマスターレコードのIDはありません!どんな助言もうまくいきます! TIA。 AsimグリッドをActiveFormに参照する方法

+0

明確ではありません。より多くの情報やあなたが書いたコードを記入してください。 –

答えて

0

子オブジェクトを追加するためにモーダルを使用する必要はありません。あなたは1つの形式でそれを行うことができます。モーダルを使用する場合は、最初に親オブジェクトを作成してからこのモーダルを表示する必要があります。このようにして、あなたの心配は無効になります。

親と子を1つのフォームに追加する場合は、両方のオブジェクトをビューに渡して、フィールドをフォームに配置できます。次に、フォーム送信時に両方のオブジェクトを検証し、すべてが正常であれば親を保存し、次に子を親に割り当て、子に親の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

+0

ありがとうntraykov!しかし、もし私が100の子供の記録を持っていたらどうなりますか?このような状況ではどのようなシナリオがありますか?表形式の入力は私の使い方には適していません。 TIA。 Asim – user2071946

+0

あなたが達成しようとしていることを正確に説明してください。あなたは「複数の」子供たちを言っていませんでした。複数の子を配置する場合は、最初に親を作成し、別の操作で子を追加します。たとえば、親のみが追加された親ページを作成し、子ページが作成されます。子ページは子が追加されます。もう1つのアプローチはajaxを使うことです。親が作成され、ボタンがある場合、このボタンを押すと、子フォームが追加されます。 'n'回押すと、 'n'の子フォームが表示されます。 –

+0

あなたが主張すれば、親と子を1つのフォームに入れることができます。 Javascriptを使用すると、複数の子を追加して、フォーム全体をサーバーに送信できます。 –

関連する問題