我有一个没有主键的表,如下所示:
| 用户标识|配置密钥|配置值|
| - ------|- ------|- ------|
| 小行星2296|配置密钥1|配置值1|
| 小行星2296|配置密钥2|配置值2|
| 小行星2296|配置密钥3|配置值3|
| 小行星2296|配置密钥4|配置值4|
每当我试图更新表中的一个值时,出于某种原因,表的其余部分也会更新为相同的值,如下所示:
| 用户标识|配置密钥|配置值|
| - ------|- ------|- ------|
| 小行星2296|配置密钥1|配置值1|
| 小行星2296|配置密钥2|配置值1|
| 小行星2296|配置密钥3|配置值1|
| 小行星2296|配置密钥4|配置值1|
我的查询如下所示:
$ConfigValue = AppUserConfig::where('user_id', 2296)
->where('config_key', 'config_key_1')
->first();
$ConfigValue->config_value = config_value_1;
$ConfigValue->save();
我只需要更新表中的一行,如下所示:
| 用户标识|配置密钥|配置值|
| - ------|- ------|- ------|
| 小行星2296|配置密钥1|配置值1|
| 小行星2296|配置密钥2|配置值2|
| 小行星2296|配置密钥3|配置值3|
| 小行星2296|配置密钥4|配置值4|
对此:
| 用户标识|配置密钥|配置值|
| - ------|- ------|- ------|
| 小行星2296|配置密钥1|新自定义值|
| 小行星2296|配置密钥2|配置值2|
| 小行星2296|配置密钥3|配置值3|
| 小行星2296|配置密钥4|配置值4|
但不确定发生了什么:(
两种解决方案都差不多解决了,谢谢大家。
2条答案
按热度按时间pxyaymoc1#
这并不奇怪,当你使用Eloquent更新一个记录时,你的update语句会使用主键来标识那个记录,我们可以假设它试图更新所有id为
2296
的行。你可以使用像clockwork
或telescope
这样的调试工具来验证你运行代码时的实际SQL语句查询您也可以尝试使用Query builder更新语句,例如:
但是最好的方法是在用户和配置之间创建一个适当的关系,比如让配置
belognsTo
成为一个用户,然后您可以执行类似于或
sr4lhrrt2#
你可以通过使用更新查询来更新,如下所示