php - 使用 laravel 观察编辑行
问题描述
我有currencies
一个表,其中只有一个必须设置为default_currency
,我被建议使用观察方法以便default_currency
在no
我添加新的之前设置default_currency
当前数据
问题
- 我观察的问题是,当我保存新数据并设置
default_currency
为yes
不仅旧数据设置为新数据default_currency
时no
- 另一个问题是,如果我保存新货币,甚至没有将
default_currency
它的值设置为yes
仍然编辑default_currency
其他行no
结果
代码
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
,如果新行具有 as 的输入数据,default_currency
则yes
让旧行为yes
知道如何解决这个问题吗?
解决方案
解决了
我的问题是由观察文件中的函数命名引起的。如您所见,我的默认创建文件public function created(Currency $currency)
在保存过程完成后更新我的数据库,因此我default_currency
的两个都将设置为no
:)
我已将函数名称更改为public function saving(Currency $currency)
form created
,saving
因此此函数在保存过程中发生,而不是在保存过程之后发生。
另外为了避免他们default_currency
设置的下一个数据出现问题no
并且不更新当前货币,我将我的代码放在了 if 条件中。
最终代码
public function saving(Currency $currency)
{
if($currency->default_currency == 'yes'){
if ($currency->isDirty('default_currency') && $currency->default_currency) {
Currency::where('default_currency', 'yes')->update(['default_currency' => 'no']);
}
return true;
}
}
希望它也能帮助其他人。
推荐阅读
- php - 如何处理来自 Guzzle 客户端的 401 响应
- r - 全局变量作为函数参数
- c# - 将值附加到数组项
- javascript - Angular:是否可以在您的子项中重用 ngIf 中的方法的结果?
- python - Python 如何比较两个长度不等的列表?
- kubernetes - 如何使用入口控制器访问自定义 URL 上的 Kube 状态指标服务指标
- javascript - 如何使用 ngClass 添加带有模式验证的验证电子邮件
- c++ - 创建一个 std::vector 的 std::vectors 类的没有复制构造函数
- python - Django 事务:如何在保存方法中运行大量 sql 查询
- python - 在python中打印多个pdf文件