многократная загрузка путей сохранения в базе данных не работает

0

Im довольно новый для Yii, и просто добавил функцию, которую администратор может загружать несколькими файлами. Тем не менее, модель сохраняет изображения, которые загружаются в соответствующую папку, но не сохраняет пути/имена изображений в базе данных.

Как я могу это сделать?

база данных выглядит так:

id | naam | беспроигрышные | prijs | actieprijs | категоризация | подкатегория | изображения | toegevoegd | aangepast | aangepast_door

контроллер:

$model=$this->loadModel($id);
        $dir = Yii::getPathOfAlias('webroot.images.producten');
        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if(isset($_POST['Producten']))
        {
            $model->attributes=$_POST['Producten'];

            $images = CUploadedFile::getInstancesByName('images');

            // proceed if the images have been set
            if (isset($images) && count($images) > 0) {

                // go through each uploaded image
                foreach ($images as $image => $pic) {
                    $fn = str_replace(" ", "-", $pic->name);
                    if ($pic->saveAs($dir.'/'.$fn)) {
                        // add it to the main model now
                        $img_add = new Producten();
                        $img_add->images = $fn; //it might be $img_add->name for you, filename is just what I chose to call it in my model

                        $img_add->save(); // DONE
                    }
                }
            }
            else{
                // handle the errors here, if you want
            }
                // save the rest of your information from the form
            if ($model->save()) {
                $this->redirect(array('view','id'=>$model->id));
            }
            /*
            $model->images=CUploadedFile::getInstance($model,'images');
            $nf = str_replace(" ", "+", $model->images);

            if($model->save()){
                $model->images->saveAs($dir.'/'.$nf);
                $model->images = $nf;
                $this->redirect(array('view','id'=>$model->id));
            }
            */
        }

        $this->render('create',array(
            'model'=>$model,
        ));

Пожалуйста помоги!!

Теги:
yii

2 ответа

0
Лучший ответ

Я понял, что он сохранил изображение в базе данных, поэтому, если я загрузил 5 фотографий, в базе данных будет только последняя фотография. Тем не менее, они сохранили все 5 на правильный путь. Теперь я сделал это, и, похоже, он работает:

public function actionCreate()
    {
        $model=new Producten;
        $dir = Yii::getPathOfAlias('webroot.images.producten');

        if(isset($_POST['Producten']))
        {
            $old_images = explode(',',strtoupper($model->images));

            $model->attributes=$_POST['Producten'];

            $images = CUploadedFile::getInstancesByName('images');

            if (isset($images) && count($images) > 0) {

                $img_add = new Producten();

                foreach ($images as $image => $pic) {
                    $fn = str_replace(" ", "-", strtoupper($pic->name));
                    if ($pic->saveAs($dir.'/'.$fn)) {

                    if(!in_array($fn, $old_images)){
                        $model->images .= $fn.",";
                    }
                }
            }
        }

        $model->toegevoegd=date('Y-m-d H:i:s', strtotime('now'));
        $model->aangepast=date('Y-m-d H:i:s', strtotime('now'));
        $model->aangepast_door=Yii::app()->user->id;

        if ($model->save()) {
            $this->redirect(array('view','id'=>$model->id));
        }
    }

    $this->render('create',array(
        'model'=>$model,
    ));
}
0

Кажется, у вас код в порядке. Здесь я предлагаю вам добавить отчет об ошибках, чтобы увидеть, есть ли какая-либо ошибка. Просто попробуйте ниже коды

$img_add->images = $fn;                        
if(!$img_add->save()){
   var_dump($img_add->getErrors());
}

Не нужно создавать объект Producten model несколько раз в foreach(). Вы можете разместить $img_add = new Producten(); перед foreach(). Также можно использовать unset($img_add->images) перед назначением $img_add->images = $fn; если необходимо.

  • 0
    В таком случае, будет ли он просто обновлять ту же запись и перезаписывать поле изображений последней?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню