spatielaravel-medialibrary改变主键。

问题描述 投票:0回答:1

我正在使用的软件包是 spatielaravel-medialibrary 我想在不编辑包的src文件的情况下,修改他们名为Media的模式的primaryKey。

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

我已经修改了迁移以反映这一点,删除了以下一行 $table->bigInteger('id') 并改行 $table->uuid('uuid')->nullable();table->uuid('uuid')->unique()->primary();

然而,现在我也想让模型知道我使用了不同的键,通过设置 protected $primaryKey = 'uuid';protected $keyType = 'string'; 但我无法在Media.php模型的package 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;
}

有什么建议可以实现吗?

谢谢。

php laravel primary-key uuid spatie
1个回答
3
投票

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,
© www.soinside.com 2019 - 2024. All rights reserved.