Можем ли мы установить столбец перечисления laravel уникальным - PullRequest
0 голосов
/ 24 января 2020

Может ли столбец перечисления быть уникальным?

В моей таблице 5 разных валют, и только одна из них должна быть по умолчанию, могу ли я установить уникальную для этого столбца?

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

1 Ответ

2 голосов
/ 24 января 2020

Нет, вы не можете использовать UNIQUE INDEX. Он будет работать для двух строк, но в третьей строке произойдет сбой, поскольку допустимые значения равны двум.

Вам необходимо вручную сделать эту логику c, и вы можете сделать это во многих местах. Мне лично нравится делать такую ​​логику c в модели наблюдателя , чтобы вы могли наблюдать за событием saving. Логика c такова:

  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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...