有一个大的问题,就是地狱混乱。我使用的是Laravel(3.2.5和现在的3.2.7),我使用Eloquent ORM来更新数据库(PostgreSQL)。Laravel(雄辩)不更新数据库
下面是我在做什么:
- 我有一个分贝完整的数据
- 我从外部API拉动信息的更新我的分贝满
- 我运行一个脚本数据将数据库充满数据放入数组中,并与API相同。这得到比较
- 我填一个数据对象与数组富于变化
- 我“挽救”它
- 没有任何反应-.-
$updateLinks = array_diff($dbLinkArray, $dbLinkArrayOriginal); $dbLink->fill($updateLinks); Log::info('1st LOG Original: '.$dbLinkArrayOriginal['link_text'].' New: '.$dbLinkArray['link_text']); Log::info('2nd Log Dirty: '.implode(', ', $dbLink->get_dirty())); $dbLink->save(); Log::info('3rd Log Supposed to be changed: '.implode(', ',array_keys($updateLinks)));
我采用了一些日志和调试工具栏弄清楚跆拳道发生了。这里的信息:
- 所有的SQL查询运行更新与正确的信息。当查询通过phpPgAdmin运行时,它会根据情况进行更新。这里的问题是查询更新行中的每一列而不仅仅是更改。使用“更新”而不是“填写/保存”会产生同样的问题。
- 没有任何表信息被更新。
- 第一个日志显示link_text不相等。这是可以的,因为它显示link_text需要更新。但是,这是一个明确的指示,下次运行脚本时没有更新。日志每次显示相同的信息,同样多的日志事件发生。
- 第二届日志显示整个对象是脏的,而不仅仅是什么应该被更新。这就是为什么SQL得到更新
- 第三日志吐出什么是应该进行更新。最多3-5列,就是这样。所有格式都是正确的。
任何想法为什么首先,即使Laravel将SQL标记为正在运行并显示正确的查询,数据库仍未得到更新?
此外,任何想法,为什么整个对象是脏和查询尝试更新整个对象(23+列),而不是只将更改(3-5列)?
第1期听起来像自动提交/事务问题。你在做这项工作吗? –
据我所知,Laravel自动执行此操作;不过,我可能是错的。你将如何提交更新?你会在每次SQL查询之后或整个脚本完成后执行它吗?也很好捕获。甚至没有想到它,只是假设Laravel会自动做到这一点。 – antjanus
不知道,我没有做PHP,也不知道Laravel超出了标签描述。未提交事务的问题仅仅是“SQL运行但数据未出现在数据库中”问题的常见原因。也许在'postgresql.conf'中启用'log_statement ='all''和'log_line_prefix ='%d%p''并查看是否可以在日志中找到没有匹配'COMMIT'的BEGIN?或者查看'pg_stat_activity',看看在交易记录中是否有'?他们的存在强烈暗示着摇摆不定的交易;他们的缺席并不排除他们,只有日志审查将这样做。 –