Laravel 背包店图片

Laravel Backpack store image

我正在尝试使用 Backpack 的 CRUD 存储图像。 模型的名称是 ProductModel,在 SetupCreateOperation 中,我有:

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

当我尝试上传图片时,出现以下错误。

String data, right truncated: 1406 Data too long for column 'photo.'

事实上,传递的字符串几乎有 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();
});

我该怎么办?

为了设置图像,您需要像这样添加字段

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

如果你想上传到 s3(amazon),请使用 'disk' => 'uploads',否则如果你想将图像保存在 public 文件夹中,请不要添加它。

另外请记住,您的图像属性需要在您的模型中设置。 像这样,

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