2

我正在使用包spatie/laravel-medialibrary并且我想更改名为 Media 的模态上的 primaryKey,而无需编辑包 src 文件。

在我的项目中,我使用 uuids 作为我所有模型的主键,所以很自然地,我想对这个包提供的 Media.php 模型做同样的事情。

$table->bigInteger('id')我已经通过删除该行并将该行更改为$table->uuid('uuid')->nullable();来更改迁移以反映这一点table->uuid('uuid')->unique()->primary();

但是,现在我也想让模型知道我正在使用不同的密钥,通过设置protected $primaryKey = 'uuid';protected $keyType = 'string';但我找不到在 Media.php 模型的包 src 文件之外执行此操作的方法

基本上,我最终要做的只是实现 HasMedia 接口并在我的 Profile 模型上使用 InteractsWithMedia 特征,如下所示:

<?php

namespace App;

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

class Profile extends Model implements HasMedia
{
    use InteractsWithMedia;
}

关于如何实现这一目标的任何建议?

谢谢。

4

1 回答 1

6

Spatie 的 medialibrary 包为您提供了使用自己的媒体模型的选项,如他们的文档中所述。

只需创建您的自定义模型并扩展库的Media模型。然后,您可以修改该 csutom 模型以满足您的需要。

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

class Media extends BaseMedia
{
    protected $primaryKey = 'uuid';

    protected $keyType = 'string';

    public $incrementing = false;

    // ...
}

请记住将media_model密钥设置为config/media-library.php模型的 FQCN。

'media_model' => App\YourMediaModel::class,
于 2020-06-03T11:36:09.757 回答