2016-06-29 6 views
0

У меня есть таблица, в которой я должен сохранить несколько данных, в мой контроллер я реализовал это действие:Yii2 несколько моделей цикла сохранить ошибку

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; 
} 

Полученные данные являются правильными, но не результат, единственное, что нужно сделать, это добавить новую строку таблицы с slider_id и image_id, равную NULL, почему модель не сохраняет правильно?

Благодаря

ответ

0

Дело в том, когда вы звоните

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

вы не измените сам $model объект. По существу вы звоните:

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

Итак, позже, когда вы звоните $model->save() вы сохраняете $model объект с пустыми атрибутами (вы только изменили display_order)

Мой совет здесь: попытаться присвоить результат ->all() призыва к новому вару, а затем работать с ним:

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

Благодаря @Ruslan Bes для ответа, окончательным решения я принятый с помощью вашего предложения в качестве следует: 'if ($ model = SlidersImages :: findOne (['slider_id' => $ id, 'image_id' => $ key])) { $ model-> display_order = $ value; // $ result = ($ t = $ model-> update())? $ result + $ t: $ result; $ result = $ model-> save() && $ result; } ' – MarBer