繁体   English   中英

我们可以将 Laravel 枚举列设置为唯一吗

[英]Can we set laravel enum column to be unique

枚举列可以是唯一的吗?

我的表中有 5 种不同的货币,其中只有一种必须是默认货币,我可以为该列设置唯一吗?

$table->enum('default_currency', ['yes', 'no'])->unique();

不,您不能使用UNIQUE INDEX 它适用于两行,但在第三行它会失败,因为有效值只有两个。

这个逻辑需要手动做,很多地方都可以做。 我个人喜欢在模型观察者中做这种逻辑,这样你就可以观看saving事件。 逻辑是这样的:

  1. 尝试保存货币(创建或更新)
  2. 模型观察者将捕获保存事件
  3. 如果default_currency设置为 true,则执行如下查询: Currency::whereDefaultCurrency(true)->update(["default_currency"=>false])

这样,您将始终拥有一种单一货币,并且default_currency设置为true

CurrencyObserver示例:

class CurrencyObserver {
    public function saving(Currency $currency) {
        if ($currency->isDirty('default_currency') && $currency->default_currency) {
            Currency::where('default_currency', true)->update(['default_currency' => false]);
        }

        return true;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM