php - Laravel - 覆盖模型 ID

标签 php laravel uuid

我正在开发电子书管理系统。我使用 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/

相关文章:

php - 如何使用php获取mysql的最后一个ID

php - 为什么要在 forge laravel 中重新安装存储库并更改 env 中的数据?

javascript - 切换引导选项卡时如何清除以前的表单字段

php - 通过mysql和yii保存并查找uuid

php - 在时事通讯退订链接中使用 UUID 是否足够安全?

php - .js、.jpg 文件链接到 .html 页面

php - codeigniter 文件未上传到远程服务器

php - 家庭计算机上的 LAMP 堆栈作为公共(public) Web 服务器

php - 在 Laravel 中翻译为特定语言

mysql - NodeJs & MySql : results. 当表 id 是 UUID 时 insertId 总是 0