Сохранение нескольких путей

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
_XAPOH_
Сообщения: 49
Зарегистрирован: 2016.04.01, 08:24

Сохранение нескольких путей

Сообщение _XAPOH_ »

Подскажите пожалуйста как при загрузке нескольких картинок сохранить путь к ним всем в бд. Сейчас сохраняется только путь последней загруженной картинки.
Код в контроллере:

Код: Выделить всё

public function actionAdd_place()
    {
        $model = new AddPlace();
        //$photoName = $model->title;
        if ($model->load(Yii::$app->request->post())) {

            $model->file = UploadedFile::getInstances($model, 'file');

            if ($model->upload($model)) {

                // file is uploaded successfully
                $model->save();
                $this->redirect(['categories']);
            }
        }


        return $this->render('add_place', ['model' => $model,]);
    } 
Код в модели (функция загрузки):

Код: Выделить всё

public function upload($model)
    {
        $photoName = $model->title;
        if ($this->validate()) {
            foreach ($this->file as $file) {

                $file->saveAs($model->rus2translit('uploads/' . $photoName . '_' . $file->baseName . '.' . $file->extension));

                $model->photo = $model->rus2translit ( $photoName . '_' . $file->baseName . '.' . $file->extension);

            }


            return true;
        } else {
            return false;
        }
    } 
и вьюха:

Код: Выделить всё

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>
<?= $form->field($model, 'file[]')->fileInput(['multiple' => true]); ?>
<div class="form-group">
                <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
            </div>
            <?php ActiveForm::end(); ?>
Сохраняет так
Изображение
а нужно что бы как-то так было
Изображение

мне тут на форуме один человек говорил array_map использовать, но я его крутил-крутил и ничего у меня не получилось.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Сохранение нескольких путей

Сообщение ElisDN »

Вы $model->photo перезатираете в цикле.
_XAPOH_
Сообщения: 49
Зарегистрирован: 2016.04.01, 08:24

Re: Сохранение нескольких путей

Сообщение _XAPOH_ »

ElisDN писал(а):Вы $model->photo перезатираете в цикле.
Это я знаю, мой вопрос состоит в том, что бы не перезатиралось, а записывало массивом в бд.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Сохранение нескольких путей

Сообщение ElisDN »

Код: Выделить всё

$photos[] = $model->rus2translit ( $photoName . '_' . $file->baseName . '.' . $file->extension); 
_XAPOH_
Сообщения: 49
Зарегистрирован: 2016.04.01, 08:24

Re: Сохранение нескольких путей

Сообщение _XAPOH_ »

ElisDN писал(а):

Код: Выделить всё

$photos[] = $model->rus2translit ( $photoName . '_' . $file->baseName . '.' . $file->extension);
Если я правильно сделал,

Код: Выделить всё

public function upload($model)
    {
        $photos[] = $model->photo;
        $photoName = $model->title;
        if ($this->validate()) {
            foreach ($this->file as $file) {

                $file->saveAs($model->rus2translit('uploads/' . $photoName . '_' . $file->baseName . '.' . $file->extension));

                $photos[] = $model->rus2translit ( $photoName . '_' . $file->baseName . '.' . $file->extension);

            }


            return true;
        } else {
            return false;
        }
    } 
картинки на сервер сохраняются, но в базу ничего не записывается.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Сохранение нескольких путей

Сообщение ElisDN »

Ну так запишите $photos куда-нибудь.
_XAPOH_
Сообщения: 49
Зарегистрирован: 2016.04.01, 08:24

Re: Сохранение нескольких путей

Сообщение _XAPOH_ »

ElisDN писал(а):Ну так запишите $photos куда-нибудь.
Я Вас не понимаю, в смысле куда-нибудь ? Раньше я вот так записывал в бд путь в поле photo

Код: Выделить всё

$model->photo = $model->rus2translit ( $photoName . '_' . $file->baseName . '.' . $file->extension); 
Теперь $photos присвоил

Код: Выделить всё

 $photos[] = $model->photo; 
и в бд по идее вот так теперь должно записывать

Код: Выделить всё

$photos[] = $model->rus2translit ( $photoName . '_' . $file->baseName . '.' . $file->extension); 
___________________

А еще появилась такая ошибка finfo_file(C:\OpenServer\userdata\temp\php7716.tmp): failed to open stream: No such file or directory. От нее можно избавиться если $model->save(); вызывать раньше вот этой строки $file->saveAs($model->rus2translit('uploads/' . $photoName . '_' . $file->baseName . '.' . $file->extension)); но вряд ли это решает проблему в целом.
Аватара пользователя
TranceSmile
Сообщения: 562
Зарегистрирован: 2011.06.27, 19:04
Откуда: Украина
Контактная информация:

Re: Сохранение нескольких путей

Сообщение TranceSmile »

А не наоборот

Код: Выделить всё

$model->photo = $photos;
 
Изображение
Ответить