spatie/laravel-medialibrary 更改主键

Dan*_* R. 2 php uuid primary-key laravel laravel-medialibrary

我正在使用包spatie/laravel-medialibrary,我想更改其名为 Media 的模式上的 PrimaryKey,而不编辑包 src 文件。

在我的项目中,我使用 uuid 作为所有模型的主键,因此自然地,我想对此包提供的 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;
}
Run Code Online (Sandbox Code Playgroud)

关于如何实现这一目标有什么建议吗?

谢谢。

Dan*_*Dan 7

Spatie 的 medialibrary 包使您可以选择使用自己的媒体模型,如其文档中所述

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

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

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

    protected $keyType = 'string';

    public $incrementing = false;

    // ...
}
Run Code Online (Sandbox Code Playgroud)

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

'media_model' => App\YourMediaModel::class,
Run Code Online (Sandbox Code Playgroud)