0

ID を変更した後、同じモデル ($modelcrite) を複数回保存する必要があります。コードは次のとおりです。

   protected function saveed($data1,$studentid,$modelcrite,$model)
    {
           $index = 0;
           foreach ($data1 as $key => $value) {
                $studentid[$index]=(string)$key;
                $modelcrite->setAttribute('st_id',$key);

                if ($modelcrite->validate()){
                        $modelcrite->setScenario('insert');
                        $modelcrite->save();

                    }               
                else {
                    $this->Delete($model->ass_id);
                    return FALSE;
                }
                $index=$index+1;
           }
           return TRUE;
    }

しかし問題は、$modelcrite の値を 2 回目に保存するときにデータベースを更新することです。新しいものとして保存する必要があり
ます。

4

1 に答える 1

1

ActiveRecord モデルがテーブルを表すのではなく、テーブル内の行を表すという事実から混乱が生じていると思います。用語を少し変更すると、新しいモデル (行) を渡すと、$modelcrite ActiveRecord はこれが新しいモデル (行) であることを認識し、保存によって挿入が実行されます。この時点で、アクティブ レコードはモデル (行) がテーブルに存在することを認識し、そのモデル (行) に対して追加の保存を行うと更新が生成されます。

その背景を念頭に置いて、foreach ループで挿入用の新しいモデルを作成し、新しいモデルの属性を $modelcrite に設定してから、student_id を設定し、検証して保存する必要があります。

このようなもの:

foreach ($data1 as $key => $value) {
   $newModel = new CriteModel();
   $newModel->attributes = $modelcrite->attributes;
   $studentid[$index]=(string)$key;
   $newModel->setAttribute('st_id',$key);

   if ($newModel->validate()){
      $newModel->save();
于 2013-06-05T21:21:27.247 に答える