mstdmstd
mstdmstd

Reputation: 3121

How to add laravel-medialibrary into Laravel/mongodb app?

I need to add spatie/laravel-medialibrary 10 into Laravel 9 app with jenssegers/mongodb:^3.9

I modified model app/Models/CMSItem.php decalaration :

<?php

namespace App\Models;

use Carbon;
use Jenssegers\Mongodb\Eloquent\Model;

use Illuminate\Validation\Rule;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;

class CMSItem extends Model implements HasMedia
{
    use InteractsWithMedia;
    use HasFactory;

    protected $collection = 'cms_items';
    public $timestamps = true;

But I got error :

Call to a member function prepare() on null

with code :

foreach ($cMSItems as $nextCMSItem) {
    $this->media_image_url             = '';
    $this->file_name                   = '';
    foreach ($nextCMSItem->getMedia(config('app.media_app_name')) as $mediaImage) { // this line raised the error
        $nextCMSItem->media_image_url = $mediaImage->getUrl();
        $nextCMSItem->file_name       = $mediaImage->file_name;
    }
}

Reading docs https://spatie.be/docs/laravel-medialibrary/v10/advanced-usage/using-your-own-model I try to define custom model in config/media-library.php :

...
//    'media_model' => Spatie\MediaLibrary\MediaCollections\Models\Media::class,
    'media_model' => App\Models\CustomMongoMedia::class,
...

and I created file app/Models/CustomMongoMedia.php with content:

<?php

namespace App\Models;

use Jenssegers\Mongodb\Eloquent\Model;

use Spatie\MediaLibrary\MediaCollections\Models\Media as BaseMedia;

class CustomMongoMedia extends BaseMedia
{
    protected $collection = 'cms_items';
    public $timestamps = true;

}

But I got the same error.

If I modify this file:

class CustomMongoMedia extends Model
{
    protected $collection = 'cms_items';
    public $timestamps = true;

}

But I got error:

    Spatie\MediaLibrary\MediaCollections\MediaRepository::__construct(): 
Argument #1 ($model) must be of type Spatie\MediaLibrary\MediaCollections\Models\Media, App\Models\CustomMongoMedia given, called in 
/mnt/_work_sdb8/wwwroot/lar/MngProducts/vendor/spatie/laravel-medialibrary/src/MediaLibraryServiceProvider.php on line 35

In which way can it be salved ?

Thanks!

Upvotes: 2

Views: 248

Answers (0)

Related Questions