spatie / laravel-medialibrary change主键

时间:2020-06-03 11:23:28

标签: php laravel primary-key uuid spatie

我正在使用软件包 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;
}

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

谢谢。

1 个答案:

答案 0 :(得分:3)

Spatie的媒体库软件包使您可以选择使用自己的媒体模型,例如described in their docs

只需创建您的自定义模型并扩展库的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,