我正在开发电子书管理系统。我使用 UUID,而不是自动递增整数主键,效果很好:
protected static function boot()
{
parent::boot();
static::creating(function ($model) {
$model->{$model->getKeyName()} = Uuid::generate()->string;
});
}
我还在模型上禁用了 PK 增量:
public $incrementing = false;
现在 EPUB 标准建议出版商为每本书分配一个 UUID(如果可能的话),所以我认为如果文件提供了现有的 UUID,最好使用它,否则为图书馆生成一个新的 UUID。
因此,我将 id
添加到模型的 $fillable
数组中,并在我的 create
Controller 方法中有条件地设置 ID:
if (array_key_exists('uuid', $epubMetaData)) {
$book->id = $epubMetaData['uuid'];
}
然后我填充其余字段并 $book->save()
这本书。它最终会得到一个新生成的 UUID,即使 $epubMetaData
数组中有一个……所以我怀疑 Laravel 决定忽略我的 ID。有什么我错过的吗?
最佳答案
好吧,您没有检查 id 是否已在创建回调中设置:
static::creating(function ($model) {
if (!$model->id) {
$model->id = Uuid::generate()->string;
}
});
关于php - Laravel - 覆盖模型 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51613453/