枚举列可以唯一吗?

我的表格中有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/

10-14 15:10
查看更多