@frmax
человек

Мультизагрузка файлов и сохранение в базу данных. Кто видел такую ошибку?

Всем привет,

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

$this->createTable('images', [
            'id' => 'int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY',
            'images_image' => Schema::TYPE_STRING. ' NULL'
        ]);
        
        $this->createTable('photos', [
            'id' => 'int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY',
            'image_id' => Schema::TYPE_INTEGER. '(10) UNSIGNED NOT NULL',
            'photos_image' => Schema::TYPE_STRING. ' NULL',
        ]);

        $this->addForeignKey('fk_photos_image_id','photos','image_id','images','id','CASCADE','CASCADE');


Моя Моделька
$this->createTable('images', [
            'id' => 'int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY',
            'images_image' => Schema::TYPE_STRING. ' NULL'
        ]);
        
        $this->createTable('photos', [
            'id' => 'int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY',
            'image_id' => Schema::TYPE_INTEGER. '(10) UNSIGNED NOT NULL',
            'photos_image' => Schema::TYPE_STRING. ' NULL',
        ]);

        $this->addForeignKey('fk_photos_image_id','photos','image_id','images','id','CASCADE','CASCADE');


Model
public $photos_image;

    public function rules()
    {
        return [
            ['photos_image','safe'],
            ['photos_image', 'file', 'extensions' => 'jpeg, gif, png, jpg', 'maxFiles' => 15],
        ];
    }

    public function behaviors() {
        return [
            [
                'class' => '\yiidreamteam\upload\ImageUploadBehavior',
                'attribute' => 'photos_image',
                'thumbs' => [
                    'thumb' => ['width' => 180, 'height' => 200],
                    'large' => ['width' => 600,'height' => 800],
                ],
                'filePath' => '@frontend/private/profile/photo/_[[attribute_id]]_original.[[extension]]',
                'fileUrl' => '/private/profile/photo/_[[attribute_id]]_original.[[extension]]',
                'thumbPath' => '@webroot/uploads/profile/avatar/photo_/[[attribute_id]].[[extension]]',
                'thumbUrl' => '/uploads/profile/avatar/photo_/[[attribute_id]].[[extension]]',
            ],
        ];
    }


View
$form = ActiveForm::begin([
    'id' => 'Items',
    'enableClientValidation' => false,
    'errorSummaryCssClass' => 'error-summary alert alert-error',
    'options' => ['enctype' => 'multipart/form-data', 'accept' => 'image/*']
]);

echo $form->errorSummary($model);

echo $form->field($model, 'images_image')->widget(FileInput::classname(), [
    'options'=>['accept'=>'image/*'],
    'pluginOptions'=>['allowedFileExtensions'=>['jpg','gif','png']
    ]]);

echo $form->field($photo, 'photos_image[]')->widget(FileInput::classname(), [
    'options' => ['accept' => 'image/*', 'multiple' => true,],
])->label(false);

echo Html::submitButton(
    '<span class="glyphicon glyphicon-check"></span> ' .
    ($model->isNewRecord ? 'Create' : 'Save'),
    [
        'id' => 'save-' . $model->formName(),
        'class' => 'btn btn-success'
    ]
);


 ActiveForm::end();


И контроллер
public function actionIndex()
    {
        $model = new Images();
        $photo = new Photos();
        if($_POST){
            if($model->load(\Yii::$app->request->post()) && $photo->load(\Yii::$app->request->post())){
                $model->images_image = UploadedFile::getInstance($model, 'images_image');
                if ($model->save()) {
                    $photo->image_id = $model->id;
                    $photo->photos_image = UploadedFile::getInstances($photo, 'photos_image');
                    if ($photo->photos_image && $photo->validate()) {
                        foreach ($photo->photos_image as $file) {
                            $p = new Photos();
                            $p->image_id = $model->id;
//<b>....вот тут происходит мистика и все как бы сохраняется файл, запись в бд, но вот имени файла нет</b>
//                            $p->photos_image = $photo->photos_image;
                            $p->save();
                        }
                    }
                }
            }
        }

        return $this->render('index', [
            'model' => $model,
            'photo' => $photo
        ]);
    }


У кого была такая проблема и он нашел решение откликнитесь плиз) или просто кому делать нечего в субботу)

Есть догадка на загадку) что я не правильно использую ImageUploadBehavior (но какой-то магигей он вссе сохраняет)
  • Вопрос задан
  • 252 просмотра
Пригласить эксперта
Ответы на вопрос 1
if ($photo->photos_image && $photo->validate()) {
                        foreach ($photo->photos_image as $file) {
                            $p = new Photos();
                            $p->image_id = $model->id;
//<b>....вот тут происходит мистика и все как бы сохраняется файл, запись в бд, но вот имени файла нет</b>
//                            $p->photos_image = $photo->photos_image;
                            $p->save();
                        }
                    }


Не знаком с языком и тут логика не совсем ясна
Объясните каждую строчку, включая где что-то не так. Если не лень.

Где использование $file ??????
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы