2016-06-29 10 views
0

Ich habe eine Tabelle, in der ich auf mehrere Daten, in meinem Controller speichere ich diese Aktion implementiert haben:Yii2 mehrere Modelle Schleife speichern Fehler

public function actionUpdateOrder($id){ 
    /*DA TESTARE*/ 
    //$result = 0; 
    $result = true; 
    $s = new Session; 
    $model = new SlidersImages(); 
    if ($new_order = Yii::$app->request->post('order')) { 
     //$s['us_model'] = 0; 
     foreach ($new_order as $key => $value) { 
      if ($model::find()->where(['slider_id' => $id, 'image_id' => $key])->all()) { 
       $s['image_'.$key] = $model; 

       $model->display_order = $value; 
       //$result = ($t = $model->update()) ? $result + $t : $result; 
       $result = $model->save() && $result; 
      } 
     } 
    } 

    return $result; 
} 

Die empfangenen Daten sind richtig, aber nicht das Ergebnis, Das einzige, was die Aktion macht, ist, eine neue Tabellenzeile mit slider_id und image_id gleich NULL hinzuzufügen, warum das Modell nicht korrekt speichert?

Dank

Antwort

0

Die Sache ist, wenn Sie

$model::find()->where(['slider_id' => $id, 'image_id' => $key])->all()

Sie die $model selbst Objekt nicht ändern nennen. Im Wesentlichen rufen Sie an:

SlidersImages::find()->where(['slider_id' => $id, 'image_id' => $key])->all()

Also, später, wenn Sie anrufen $model->save() Sie ein $model Objekt mit leeren Attributen speichern (Sie verändert nur display_order)

Mein Rat hier: versuchen, das Ergebnis zuweisen die ->all() Aufruf der neuen var und dann mit ihm arbeiten:

public function actionUpdateOrder($id){ 
    /*DA TESTARE*/ 
    //$result = 0; 
    $result = true; 
    $s = new Session; 
    if ($new_order = Yii::$app->request->post('order')) { 
     //$s['us_model'] = 0; 
     foreach ($new_order as $key => $value) { 
      $models = SliderImages::find()->where(['slider_id' => $id, 'image_id' => $key])->all(); 
      if (count($models)) { 
       // loop through $models and update them 
      } 
     } 
    } 

    return $result; 
+0

Dank @Ruslan Bes für die Antwort, die endgültige Lösung, die ich angenommen habe mit Ihrem Vorschlag ist als folgt: 'if ($ model = SlidersImages :: findOne (['slider_id' => $ id, 'image_id' => $ schlüssel])) { $ model-> display_order = $ value; // $ result = ($ t = $ modell-> update())? $ Ergebnis + $ t: $ Ergebnis; $ result = $ model-> save() && $ result; } ' – MarBer