php - 在 Nova 中处理自动生成的 UUID
问题描述
我有一个带有 UUID 属性的模型,保存在数据库uuid
字段中。在 Nova 中,我可以这样声明:
Text::make('UUID');
这不会用默认值(一个新的随机 UUID)填充该字段,所以我添加:
Text::make('UUID')
->default(
function () {
return Uuid::uuid4();
}
)
这填充了该字段,但它是可编辑的,我不想允许,尽管我确实希望在查看详细视图时显示它,所以我添加了这些:
Text::make('UUID')
->default(
function () {
return Uuid::uuid4();
}
)
->readonly()
->onlyOnDetail()
但是,这是不可用的,因为它会导致uuid
从生成的插入查询中省略该字段,并且出现 SQL 错误:
SQLSTATE[HY000]: General error: 1364 Field 'uuid' doesn't have a default value
(SQL: insert into `things` (`name`, `description`, `updated_at`, `created_at`)
values (Case, ?, 2021-07-23 18:07:28, 2021-07-23 18:07:28))
如果是只读状态导致了这种情况,我尝试使用以下方法隐藏它:
->hideWhenCreating()
->hideWhenUpdating()
但这遇到了同样的 SQL 问题,表明它是可见性的,而不是导致问题的只读状态。
另一种方法是使用Hidden
字段类型,文档正是为了这种目的而建议的。这有点工作,允许动态默认值并防止编辑,但它不允许该字段显示在任何视图上。像这样配置,根本就没有出现:
Hidden::make('UUID')
->default(
function () {
return Uuid::uuid4();
}
)
->showOnDetail()
即showOnDetail
不会覆盖字段的隐藏性质。
我应该使用什么属性组合来拥有一个字段:
- 使用默认值动态填充
- 不可编辑
- 隐藏在创作中
- 显示在细节上
- 包含在数据库查询中?
解决方案
推荐阅读
- laravel - Laravel 雄辩查询返回月订单总和
- javascript - v-for 似乎改变了数组顺序
- linux - SIDT 指令在 Linux 用户空间进程中返回错误的基地址
- html - C++如何将文本文件格式化为html文件
- python - CPU only pytorch 因错误 AssertionError 崩溃:Torch 未在启用 CUDA 的情况下编译
- javascript - 为什么不能通过调用数组元素来初始化对象文字的键?(Javascript)
- python-3.x - 如何设置 APScheduler 时区并在一个小时范围内执行任务?
- javascript - 在 stenciljs 中对按钮单击使用承诺
- azure - arm模板800资源限制
- perf - 如何将任务时钟性能事件转换为秒或毫秒?