Yii2上传多次成功,但只保存第一个值到数据库

时间:2018-03-23 04:36:33

标签: yii2 yii2-basic-app

我正在为我的网站编写多重上传功能。上传成功。但它只保存我的数据库的第一个值。示例我上传3个文件名称1.jpg,2.jpg,3.jpg。然后它会成功上传3个文件,但只保存1.jpg的名称到数据库。

我的控制器

public function actionCreate()
{
    $model = new Resource3d();

    if ($model->load(Yii::$app->request->post())) {
        $model->files = UploadedFile::getInstances($model, 'files');  

        foreach ($model->files as $files){

            $files->saveAs('uploads/resource3d/' . $files->baseName . $files->extension); 
            $model->path = '../web/uploads/resource3d/'. $files->baseName . $files->extension;      
            $model->name =  $files->baseName;   
            $model->save();          

        }

        return $this->redirect(['index']);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

我的模特:

public $files;
public function rules()
{
    return [
        [['name', 'path'], 'string', 'max' => 255],
        [['files'], 'file', 'skipOnEmpty' => false, 'maxFiles' => 0],
    ];
}

请帮忙。

谢谢。

1 个答案:

答案 0 :(得分:1)

您正在创建模型的单个对象 Resource3d 。如果要保存多个记录,则需要创建多个对象。

试试这个:

public function actionCreate()
{
    $model = new Resource3d();

    if ($model->load(Yii::$app->request->post())) {
        $model->files = UploadedFile::getInstances($model, 'files');  

        foreach ($model->files as $files){
            $res_model = new Resource3d();
            $res_model->load(Yii::$app->request->post());
            $files->saveAs('uploads/resource3d/' . $files->baseName . $files->extension); 
            $res_model->path = '../web/uploads/resource3d/'. $files->baseName . $files->extension;      
            $res_model->name =  $files->baseName;   
            $res_model->save();          
        }

        return $this->redirect(['index']);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

这只是一个例子,根据您的需要进行更改。