Нет, вы не можете использовать UNIQUE INDEX
. Он будет работать для двух строк, но в третьей строке произойдет сбой, поскольку допустимые значения равны двум.
Вам необходимо вручную сделать эту логику c, и вы можете сделать это во многих местах. Мне лично нравится делать такую логику c в модели наблюдателя , чтобы вы могли наблюдать за событием saving
. Логика c такова:
- Что-то пытается сохранить валюту (создать или обновить)
- Наблюдатель модели поймает событие сохранения
- Если Для
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;
}
}