spatie/laravel-medialibrary 更改主键
spatie/laravel-medialibrary change primary key
我正在使用包 spatie/laravel-medialibrary 并且我想在他们的名为 Media 的模式上更改主键,而不编辑包 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;
}
关于如何实现这一点有什么建议吗?
谢谢。
Spatie 的媒体库包让您可以选择使用自己的媒体模型,如 described in their docs。
只需创建您的自定义模型并扩展库的 Media
模型。然后您可以修改该自定义模型以满足您的需要。
use Spatie\MediaLibrary\MediaCollections\Models\Media as BaseMedia;
class Media extends BaseMedia
{
protected $primaryKey = 'uuid';
protected $keyType = 'string';
public $incrementing = false;
// ...
}
记得将 config/media-library.php
中的 media_model
键设置为您模型的 FQCN。
'media_model' => App\YourMediaModel::class,
我正在使用包 spatie/laravel-medialibrary 并且我想在他们的名为 Media 的模式上更改主键,而不编辑包 src 文件。
在我的项目中,我使用 uuid 作为我所有模型的主键,所以自然地,我想为这个包提供的 Media.php 模型做同样的事情。
我已经通过删除行 $table->bigInteger('id')
并将行 $table->uuid('uuid')->nullable();
更改为 table->uuid('uuid')->unique()->primary();
但是,现在我还想让模型知道我正在使用不同的密钥,方法是设置 protected $primaryKey = 'uuid';
和 protected $keyType = 'string';
,但我找不到在外部执行此操作的方法Media.php 模型
基本上,我最终想做的只是实现 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;
}
关于如何实现这一点有什么建议吗?
谢谢。
Spatie 的媒体库包让您可以选择使用自己的媒体模型,如 described in their docs。
只需创建您的自定义模型并扩展库的 Media
模型。然后您可以修改该自定义模型以满足您的需要。
use Spatie\MediaLibrary\MediaCollections\Models\Media as BaseMedia;
class Media extends BaseMedia
{
protected $primaryKey = 'uuid';
protected $keyType = 'string';
public $incrementing = false;
// ...
}
记得将 config/media-library.php
中的 media_model
键设置为您模型的 FQCN。
'media_model' => App\YourMediaModel::class,