Php Laravel(雄辩)不更新数据库
有个大问题让人很困惑。我正在使用Laravel(3.2.5,现在是3.2.7),我正在使用有说服力的ORM来更新数据库(PostgreSQL) 以下是我正在做的:Php Laravel(雄辩)不更新数据库,php,postgresql,laravel,laravel-3,Php,Postgresql,Laravel,Laravel 3,有个大问题让人很困惑。我正在使用Laravel(3.2.5,现在是3.2.7),我正在使用有说服力的ORM来更新数据库(PostgreSQL) 以下是我正在做的: 我有一个数据库充满了数据 我从一个外部API中提取信息来更新我的数据库中的全部数据 我运行了一个脚本,将数据库中充满数据的数据放入数组中,并使用API将其放入数组中。这是可以比较的 我用一个充满变化的数组填充数据对象 我“保存”它 什么也没发生- $UpdateLink=array_diff($dbLinkArray,$dbLin
- 我有一个数据库充满了数据
- 我从一个外部API中提取信息来更新我的数据库中的全部数据
- 我运行了一个脚本,将数据库中充满数据的数据放入数组中,并使用API将其放入数组中。这是可以比较的
- 我用一个充满变化的数组填充数据对象
- 我“保存”它
- 什么也没发生-
- 所有SQL查询都会运行以使用正确的信息进行更新。当查询通过phpPgAdmin运行时,它会按原样更新。这里的问题是查询会更新行中的每一列,而不仅仅是更改。使用“更新”而不是“填充/保存”会产生相同的问题
- 没有一个表信息得到更新
- 第一个日志显示链接文本不相等。这没关系,因为它显示链接文本需要更新。但是,很明显,下次运行脚本时没有更新任何内容。日志每次都显示相同的信息,发生的日志事件也一样多
- 第二个日志显示整个对象是脏的,而不仅仅是应该更新的对象。这就是SQL得到更新的原因
- 第三个日志显示了应该更新的内容。最多3-5列,仅此而已。一切都是正确的格式
亨德里克第一期听起来像是自动提交/交易问题。你在做这项工作吗?据我所知,拉雷维尔是自动做这项工作的;然而,我可能错了。您将如何提交更新?您是在每次SQL查询之后还是在完成整个脚本之后执行此操作?也很好的捕捉。我甚至没有想到,只是假设Laravel会自动完成。不知道,我不做PHP,也不知道除了标签描述之外Laravel是什么。未提交事务的问题只是“SQL运行但数据未出现在数据库中”问题的常见原因。可以在
postgresql.conf
中启用log\u statement='all'
和log\u line\u prefix='%d%p'
,查看是否可以在日志中找到BEGIN
s而不匹配COMMIT
s?或者查看pg_stat_activity
并查看事务条目中是否有?他们的存在强烈暗示着悬而未决的交易;他们的缺席并不排除他们,只有日志检查才能做到这一点。
$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)));