У меня есть currencies
таблица, где только один из них должен быть установлен как default_currency
, мне предложили использовать метод наблюдения, чтобы установить предыдущий default_currency
в no
, когда я добавлю новый default_currency
Текущие данные
![one](https://i.stack.imgur.com/mJoXf.png)
Проблемы
- Проблема с моим наблюдением заключается в том, когда я сохраняю новый данные и установите
default_currency
в yes
не только старый default_currency
будет установлен в no
, но и новый - Другой вопрос, если я сохраняю новую валюту и даже не устанавливаю
default_currency
ее значение в yes
все еще редактируется default_currency
другой строки в no
Результат
![two](https://i.stack.imgur.com/NHpmF.png)
Код
Observe
<?php
namespace App\Observers;
use App\Currency;
class CurrencyObserver
{
public function created(Currency $currency)
{
if ($currency->isDirty('default_currency') && $currency->default_currency) {
Currency::where('default_currency', 'yes')->update(['default_currency' => 'no']);
}
return true;
}
public function updated(Currency $currency)
{
if ($currency->isDirty('default_currency') && $currency->default_currency) {
Currency::where('default_currency', 'yes')->update(['default_currency' => 'no']);
}
return true;
}
public function deleted(Currency $currency)
{
//
}
public function restored(Currency $currency)
{
//
}
public function forceDeleted(Currency $currency)
{
//
}
}
Controller
public function store(Request $request)
{
$request->validate([
'name' => 'required|string|unique:currencies',
'symbol' => 'required|unique:currencies',
'position' => 'required',
'decimal_point' => 'required',
'separator_point' => 'required',
'decimals' => 'required',
'default_currency' => 'required', //won't save!
]);
$currency = new Currency;
$currency->name = $request->input('name');
$currency->symbol = $request->input('symbol');
$currency->position = $request->input('position');
$currency->decimal_point = $request->input('decimal_point');
$currency->separator_point = $request->input('separator_point');
$currency->decimals = $request->input('decimals');
$currency->default_currency = $request->input('default_currency');
$currency->save();
return response()->json([
'data' => $currency,
'success' => 'Your currency saved successfully.'
]);
}
Что я хочу
- Установить старую строку
default_currency
в no
, если новая строка имеет входные данные default_currency
как yes
в противном случае просто оставьте старую yes
Есть идеи, как решить эту проблему?