【问题标题】:Yii2 multiple models loop save errorYii2多个模型循环保存错误
【发布时间】:2016-06-29 10:07:21
【问题描述】:

我有一个表,我必须在其中保存多个数据,在我的控制器中我已经实现了这个动作:

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_idimage_id等于NULL的新表行,为什么模型不能正确保存?

谢谢

【问题讨论】:

    标签: php activerecord yii2 yii2-advanced-app yii2-model


    【解决方案1】:

    问题是当你打电话时

    $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() 调用的结果分配给新的 var,然后使用它:

    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;
    

    【讨论】:

    • 感谢@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; }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    相关资源
    最近更新 更多