簡體   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