Laravel - 覆盖模型 ID
Laravel - Override model ID
我正在开发电子书管理系统。我使用的是 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 会很好,否则为图书馆生成一个新的 UUID。
所以我将 id
添加到模型的 $fillable
数组中,并在我的 create
控制器方法中有条件地设置 ID:
if (array_key_exists('uuid', $epubMetaData)) {
$book->id = $epubMetaData['uuid'];
}
然后我填充其余字段和 $book->save()
这本书。它以一个新生成的 UUID 结束,即使 $epubMetaData
数组中有一个……所以我怀疑 Laravel 决定忽略我的 ID。有什么我错过的吗?
要禁用自动递增(并因此通过 Laravel 管理您的 id 列),您可以添加一个 public $incrementing 属性 到您的模型并将其设置为 false :
public $incrementing = false;
您还可以在模型中设置一个受保护的 $primaryKey 属性 来覆盖默认 id 列的名称:
protected $primaryKey = 'uuid';
当然,如果您的专栏名为 "id",则不必这样做。
好吧,您没有检查是否已在创建回调中设置了 id:
static::creating(function ($model) {
if (!$model->id) {
$model->id = Uuid::generate()->string;
}
});
我正在开发电子书管理系统。我使用的是 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 会很好,否则为图书馆生成一个新的 UUID。
所以我将 id
添加到模型的 $fillable
数组中,并在我的 create
控制器方法中有条件地设置 ID:
if (array_key_exists('uuid', $epubMetaData)) {
$book->id = $epubMetaData['uuid'];
}
然后我填充其余字段和 $book->save()
这本书。它以一个新生成的 UUID 结束,即使 $epubMetaData
数组中有一个……所以我怀疑 Laravel 决定忽略我的 ID。有什么我错过的吗?
要禁用自动递增(并因此通过 Laravel 管理您的 id 列),您可以添加一个 public $incrementing 属性 到您的模型并将其设置为 false :
public $incrementing = false;
您还可以在模型中设置一个受保护的 $primaryKey 属性 来覆盖默认 id 列的名称:
protected $primaryKey = 'uuid';
当然,如果您的专栏名为 "id",则不必这样做。
好吧,您没有检查是否已在创建回调中设置了 id:
static::creating(function ($model) {
if (!$model->id) {
$model->id = Uuid::generate()->string;
}
});