我有一个由3列组成的用户设置表(或见下图):user\u id
,setting
,value
。
然后我有两个函数,一个保存时区,一个保存时间格式。
public function setTimezone($timezone){
$settings = UserSettingsModel::firstOrNew(['user_id' => $this->user->id, 'setting' => 'timezone']);
$settings->setting = 'timezone';
$settings->value = $timezone;
$result = $settings->save();
}
public function setTimeFormat($timeformat){
$settings = UserSettingsModel::firstOrNew(['user_id' => $this->user->id, 'setting' => 'timeformat']);
$settings->setting = 'timeformat';
$settings->value = $timeformat;
$result = $settings->save();
}
当我第一次运行函数时(每个函数都是通过ajax调用独立运行的),我得到了正确的结果:
然后,当我尝试更新时间格式时(同样,每个都独立运行),我得到以下结果:
由于某种原因,时区设置覆盖了时间格式设置,我不确定为什么。
以下是UserSettingsModel类:
class UserSettingsModel extends BaseModel{
protected $table = 'user_settings';
protected $fillable = ['user_id', 'setting', 'value'];
protected $primaryKey = 'user_id';
public $timestamps = false;
}
以下是时区更新的查询日志:
array:2 [
0 => array:3 [
"query" => "select * from `user_settings` where (`user_id` = ? and `setting` = ?) limit 1"
"bindings" => array:2 [
0 => 1
1 => "timezone"
]
"time" => 0.27
]
1 => array:3 [
"query" => "update `user_settings` set `value` = ? where `user_id` = ?"
"bindings" => array:2 [
0 => "America/Chicago"
1 => 1
]
"time" => 19.73
]
]
以下是timeformat查询的查询日志:
array:2 [
0 => array:3 [
"query" => "select * from `user_settings` where (`user_id` = ? and `setting` = ?) limit 1"
"bindings" => array:2 [
0 => 1
1 => "timeformat"
]
"time" => 0.25
]
1 => array:3 [
"query" => "update `user_settings` set `value` = ? where `user_id` = ?"
"bindings" => array:2 [
0 => "12hr"
1 => 1
]
"time" => 13.67
]
]
您有一个由user_id
和设置
组成的复合主键。
但是你的模型宣称
protected $primaryKey = 'user_id';
您发布的查询日志清楚地显示SELECT
语句是正确的,但是UPDATE
不是因为WHERE
子句只指定了对user\u id
的要求。
谷歌搜索(以及其他人的评论)Laravel似乎在复合键方面存在问题。
如果找不到合适的解决方法,可以在表中添加id
列(主键、int、自动递增),并更新模型定义。
然后让其他列成为标准列(如果需要,只需将它们编入索引)。
在添加新用户时,您将有一些额外的工作,因为我猜您希望为每个设置添加一行。。。
我正在尝试使用具有唯一约束“phone\u number\u key”的jooq和table实现save或update方法 我的代码: 但我得到了例外 错误:重复的键值违反唯一约束“phone_number_key”详细信息:key(“phoneNumber”)=(99999999)已存在。 我使用“.onDuplicateKeyUpdate()”方法时遇到了相同的错误 我使用postgres d
已安装的laravel模板构建在版本4.2上,当我制作composer(安装/更新)时,composer仍然存在此错误。 问题1 -d11wtq/boris v1.0.10的安装请求-
如果值不改变,我想忽略段塞。我目前得到这个错误,每当我更新的形式。 这是我的验证请求。 命名空间App\Http\Requests\Admin; 使用Illumb\Foundation\Http\FormRequest; 类ProductInsertFormRequest扩展FormRequest{/***确定用户是否有权发出此请求。**@return bool*/public function
我试图更新作曲家,但得到错误 以下是错误日志的链接:https://pastebin.com/JNT7Wi15 Laravel版本:5.4 Php版本:PHP7.2。4-1乌本图16。04.1黛布。苏里。org 1(cli)(构建时间:2018年4月5日08:53:57)(NTS)版权所有(c)1997-2018 PHP Group Zend Engine v3。2.0,版权所有(c)1998-2
我正在尝试在Laravel中复制个人资料页。这一切都很好,但当我点击“保存”以保存配置文件中的更改时,它显示的就像我一样 没有争论。此消息Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException无消息。 由于某些原因,我无法从文件中导入代码,没有代码的人能帮忙吗?
我想使用MySQL5.7和MySQL Workbench6.2在表中插入一些行。当我尝试它时,我得到了错误1175(在安全更新模式下没有WHERE的更新)