【问题标题】:Laravel - Set default value of column on record updateLaravel - 在记录更新时设置列的默认值
【发布时间】: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。这就是我会做的。

标签: php laravel eloquent


【解决方案1】:

试试这个:

$table->double('amount')->default(1);

【讨论】:

    猜你喜欢
    • 2015-11-05
    • 2020-03-16
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 2013-05-20
    • 2013-04-24
    相关资源
    最近更新 更多