laravel - updateOr如果我们得到null,则创建一行并跳过列更新,保留原始值
问题描述
是否有可能做到这一点?我有一个接受这些参数的函数。
第一次调用它时,它将创建由 JSON 文件定义的所有可能设置并将它们保存到数据库中。这里的重要列是 meta,它是字符串列,但保存 json 值。
一旦数据被保存到数据库中,元值就不需要再修改了,当我们想要保存时,我们不需要将它们从 UI 发送回服务器。如果 $meta 为空,下面会发生什么?它也会将元列设置为空。如果传入的值为空,是否有一种优雅的方法告诉 laravel 不要更新列,所以它保留旧值?
public function saveSetting($section, $parent, $key, $value, $type = 'string', $meta)
{
if(is_array($value) || is_object($value)) {
$type = 'json';
$value = json_encode($value);
}
$setting = $this->settings()->updateOrCreate(
['theme_id' => $this->id, 'section' => $section, 'key' => $key],
['section' => $section, 'parent_id' => $parent, 'key' => $key, 'value' => $value, 'type' => $type, 'meta' => $meta]
);
return $setting;
}
现在我想到的唯一解决方案是我使用 if 来查看是否设置了 meta,如下所示:
public function saveSetting($section, $parent, $key, $value, $type = 'string', $meta)
{
if(is_array($value) || is_object($value)) {
$type = 'json';
$value = json_encode($value);
}
if(isset($meta)) {
$setting = $this->settings()->updateOrCreate(
['theme_id' => $this->id, 'section' => $section, 'key' => $key],
['section' => $section, 'parent_id' => $parent, 'key' => $key, 'value' => $value, 'type' => $type, 'meta' => $meta]
);
} else {
$setting = $this->settings()->updateOrCreate(
['theme_id' => $this->id, 'section' => $section, 'key' => $key],
['section' => $section, 'parent_id' => $parent, 'key' => $key, 'value' => $value, 'type' => $type]
);
}
return $setting;
}
有没有更好的方法来跳过更新元?
调用 saveSetting 函数的代码如下所示:
foreach ($section as $key => $setting) {
$theme->saveSetting($sectionKey, $sectionSetting->id, $key, $setting['value'], $setting['type'], null);
}
meta 设置为 null,因为我们已经在数据库中有 meta,并且我们的 UI 不需要在用户按下保存时将其发送到服务器。我们只发送到服务器数据用户实际上可以修改。
解决方案
如果我理解你的问题是正确的......你为什么不想要这样的东西?
$dataToUpdate = [
'section' => $section,
'parent_id' => $parent,
'key' => $key,
'value' => $value,
'type' => $type
];
if ($meta) {
$dataToUpdate['meta'] = $meta;
}
$setting = $this->settings()->updateOrCreate(
[
'theme_id' => $this->id,
'section' => $section,
'key' => $key
],
$dataToUpdate
);
推荐阅读
- scala - 使用 Databricks 作业输出 Hadoop HFile
- python - 完成python中数组的所有方程的最佳方法,用户输入的边界和轴大小问题
- python - Python Anaconda 阻止 psql 连接
- python - 我如何从 Python 中的列表中获取随机对象
- oracle - 我想查询我的棋盘表
- linux - kprobe 中的系统调用参数具有错误的值 libbpf
- java - 如何更改三角形的位置?
- java - netty 可以处理带外数据(使用 TCP 的 URGent 标志发送)吗?
- html - 将 XML 转换为 HTML 并使用 CSS 对其进行格式化
- firefox - 本地自定义 cookie 设置