我想要一种更新表的更好方法,例如:
|name |value
--------------------------------------
|cache_lifespan |240
|idle_time |900
|jump_menu |1
|listing |25
|system_off |1
以上是设置值,我以某种形式提供它们,具有特权的用户可以更新它们。我正在模型“设置”中使用以下方法来更新每个设置值,但我觉得这不是完美的方法。
public function updateSettings($fields)
{
Setting::where('name', 'system_off')->update(['value' => $fields['system_off']]);
Setting::where('name', 'listing')->update(['value' => $fields['listing']]);
Setting::where('name', 'jump_menu')->update(['value' => $fields['jump_menu']]);
Setting::where('name', 'cache_lifespan')->update(['value' => $fields['cache_lifespan']]);
Setting::where('name', 'idle_time')->update(['value' => $fields['idle_time']]);
cache()->forget('settings');
}
我试图找到一种方法来通过一个查询更新所有设置。
答案 0 :(得分:1)
因为您尝试用不同的值更新具有不同条件的同一张表,所以是不可能的。
另外,您尝试更新许多项目,并且必须使用事务。
我可以建议您使用此代码
$updatedColumns = ['system_off', 'listing', 'jump_menu', 'cache_lifespan', 'idle_time'];
DB::beginTransaction();
foreach ($updatedColumns as $column) {
if (!Setting::where('name', $column)->update(['value' => $fields[$column]])) {
DB::rollBack();
}
}
DB::commit();
如果您不使用交易,则可以使用此代码
$updatedColumns = ['system_off', 'listing', 'jump_menu', 'cache_lifespan', 'idle_time'];
foreach ($updatedColumns as $column) {
Setting::where('name', $column)->update(['value' => $fields[$column]]);
}