【发布时间】:2022-01-04 22:58:14
【问题描述】:
我有这个迁移:
class CreatePendingCredits extends Migration
{
public function up()
{
Schema::create('pending_credits', function (Blueprint $table) {
$table->id();
$table->uuid('uuid')->unique()->default(DB::raw('UUID()'));
$table->foreignIdFor(App\Models\User::class, 'user_id')->references('id')->on('users');
$table->double('amount');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('pending_credits');
}
}
当我为pending_credits创建新记录时,我没有设置uuid属性,所以数据库会生成一个新的uuid(使用默认值)。
假设出于某种原因,我需要更新一条记录的 uuid,就像我创建新记录并且数据库生成 uuid 时一样。
是吗:
PendingCredit::find(18)->update(['uuid'=>null]);
或者:
PendingCredit::find(18)->update(['uuid'=>DB::raw('UUID()')]);
或者有标准的方法吗?
更新
想象一下,默认值不仅仅是数据库中的简单UUID(),那么将默认表达式从数据库复制到代码中是不好的。
【问题讨论】:
-
你试过这些看看吗?
-
我试过
DB::raw...,但我的问题是,“有什么标准方法可以做到这一点吗?或者我们应该通过技巧来做到这一点?” @lagbox跨度> -
通过什么技巧?你有什么诀窍? ...始终可以选择在 PHP 端生成 UUID
-
如果架构中的默认值不仅仅是一个简单的
UUID()! @lagbox -
老实说,我认为 Laravel 没有办法做到这一点。使用
DB::raw('UUID()')应该很好,因为它将使用数据库 UUID 函数并将 UUID 的处理完全留给 DB。这就是我会做的。