sanjayacloud's avatar

Cannot upload image using Spatie Media Library

Hi Guys,

I am trying to upload images using the spatie media library. But I am getting the below error while I am trying to upload an image.

Argument 1 passed to Spatie\MediaLibrary\FileAdder\FileAdder::processMediaItem() must be an instance of Spatie\MediaLibrary\HasMedia\HasMedia, instance of App\Model\Category given, called in C:\wamp64\www\projects\2021\laravel\edexa\vendor\spatie\laravel-medialibrary\src\FileAdder\FileAdder.php on line 364

Here is my model

<?php

namespace App\Model;

use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\HasMedia\HasMedia;
use Spatie\MediaLibrary\HasMedia\HasMediaTrait;

class Category extends Model
{
    use HasMediaTrait;

    protected $fillable = ['name', 'slug', 'description', 'status'];

}

Hire is my upload function.

public function store(Request $request)
    {
        Validator::make($request->all(), [
            'name' => 'required',
            'image' => 'required',
            'description' => 'required',
        ])->validate();
        
        $category = Category::create([
            'name' => $request->name,
            'slug' => Str::slug($request->name, '-'),
            'description' => $request->description,
        ]);
        $category->addMedia($request->file('image'))->toMediaCollection('category');;
        return back()->with('success', 'Category created.');
    }

Anyone can help me with this?

0 likes
2 replies
Charizard's avatar
Level 5

You need your model to implement to HasMedia interface like the following:

use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\HasMedia\HasMedia;
use Spatie\MediaLibrary\HasMedia\HasMediaTrait;

class Category extends Model implements HasMedia
{
    use HasMediaTrait;

    protected $fillable = ['name', 'slug', 'description', 'status'];

}

Please or to participate in this conversation.