枚举列可以唯一吗?
我的表格中有5种不同的货币,并且其中只有一种是默认货币,我可以为该列设置唯一货币吗?
$table->enum('default_currency', ['yes', 'no'])->unique();
最佳答案
不,您不能使用UNIQUE INDEX
。它适用于两行,但是在第三行中它将失败,因为有效值只有两个。
您需要手动执行此逻辑,并且可以在许多地方执行此逻辑。我个人喜欢在model observer中执行这种逻辑,因此您可以观看saving
事件。逻辑是这样的:
尝试保存货币(创建或更新)
模型观察者将捕获保存事件
如果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;
}
}
关于mysql - 我们可以将laravel枚举列设置为唯一,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59889179/