Изображение магазина Laravel Backpack

Я пытаюсь сохранить изображение с помощью Backpack CRUD. Модель называется ProductModel, и в SetupCreateOperation у меня есть:

CRUD::addField([
     'name' => 'photo',
     'label' => 'Foto',
     'type'  => 'image'
]);

Когда я пытаюсь загрузить изображение, я получаю сообщение об ошибке следующего содержания.

Строковые данные, усеченные справа: 1406 Данные слишком длинные для столбца "фото".

Действительно, передаваемая строка имеет длину почти 7000 символов.

Модель

class ProductModel extends Model
{
    use \Backpack\CRUD\app\Models\Traits\CrudTrait;
    use HasFactory;

    protected $guarded = [];

    public function products()
    {
        return $this->hasMany('App\Models\SoldProduct', 
            'product_model_id', 'id');
    }
}

Миграция

Schema::create('product_models', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('photo'); //path 
    $table->integer('stock');
    $table->integer('limited_edition_pieces');
    $table->decimal('price', 8, 2);
    $table->string('note')->nullable();
    $table->timestamps();
});

Что я должен делать?

Не сохраняйте изображение в базу данных, сохраняйте только путь или путь к папке из ваших изображений.

Encang Cutbray 20.12.2020 16:06
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Как получить URL-адрес реферера в PHP и Laravel?
Как получить URL-адрес реферера в PHP и Laravel?
Когда пользователи посещают ваш сайт, бывает полезно знать, откуда они пришли. URL-адрес реферера предоставляет информацию о странице, на которой...
Привязка маршрутной модели в Laravel
Привязка маршрутной модели в Laravel
Laravel - один из самых популярных на сегодняшний день PHP-фреймворков. Одной из его многочисленных функций является Route Model Binding, которая...
0
1
942
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы установить изображение, вам нужно добавить поле, подобное этому

 $this->crud->addField([
    'name' => 'image',
    'label' => 'Image',
    'type' => 'upload',
    'upload' => true
]);

Используйте 'disk' => 'uploads', если вы хотите загрузить на s3 (amazon), в противном случае не добавляйте его, если вы хотите сохранить изображения в общей папке.

Также имейте в виду, что атрибут изображения должен быть установлен в вашей модели. Так,

public function setImageAttribute($value)
    {
        $attribute_name = "image";
        // you can check here if file is recieved or not using hasFile()
        $disk = "public";
        $destination_path = "/uploads";       
        $this->uploadFileToDisk($value, $attribute_name, $disk, $destination_path);
    }

UploadFileToDisk() заключается в вашем Backpack\CRUD\app\Models\Traits\CrudTrait, который вы уже добавили

Вау, спасибо, это действительно помогло. Теперь все работает.

pierluromani 25.12.2020 17:00

Сделайте это, но в пути к изображению покажите "/tmp/phphdc0Yq" и не перемещайте файл в общую папку

vannak 07.06.2022 11:36

Другие вопросы по теме