Laravel(Eloquent)未更新数据库


Laravel (Eloquent) Not Updating Database

遇到了一个非常令人困惑的大问题。我使用Laravel(3.2.5和现在的3.2.7),我使用Eloquent ORM更新数据库(PostgreSQL)。

我在做什么:

  • 我有一个装满数据的数据库
  • 我正在从外部API获取信息,以更新我的数据库中的数据
  • 我运行了一个脚本,将数据库中的数据放入数组中,API也是如此。这是比较
  • 我用一个充满更改的数组填充数据对象
  • 我"保存"它
  • 什么也没发生-
$updateLinks=array_diff($dbLinkArray,$dbLinkArrayOriginal);$dbLink->fill($updateLinks);日志::info('第一个日志原始:'.$dbLinkArrayOriginal['link_text'].'新:'.$dbLinkArray['link_text']);日志::info('2nd Log Dirty:'.inflamide(',',$dbLink->get_Dirty()));$dbLink->save();日志::info('3rd Log Supped to be changed:'.inbulade(',',array_keys($updateLinks));

我使用了一些日志记录和调试工具栏来了解发生了什么。信息如下:

  • 运行所有SQL查询以使用正确的信息进行更新。当查询通过phpPgAdmin运行时,它会按照应该的方式进行更新。这里的问题是查询会更新行中的每一列,而不仅仅是更改。使用"更新"而不是"填充/保存"会产生同样的问题
  • 表信息都不会更新
  • 第一个日志显示link_text不相等。这是可以的,因为它显示link_text需要更新。然而,这清楚地表明,下次运行脚本时没有更新任何内容。日志每次都会显示相同的信息,并且会显示同样多的日志事件
  • 第二个日志显示整个对象是脏的,而不仅仅是应该更新的。这就是SQL被更新的原因
  • 第三个日志准确地列出了应该更新的内容。最多3-5列,仅此而已。所有内容的格式都正确

你知道为什么尽管Laravel将SQL标记为正在运行并显示正确的查询,但数据库却没有得到更新吗?

此外,您知道为什么ENTIRE对象是脏的,并且查询试图更新整个对象(23+列)而不是仅更新更改(3-5列)吗?

关于第二个问题(为什么所有列都更新,而不仅仅是脏列)。Laravel文件指出:

默认情况下,所有属性键/值对都将在批量指定期间存储。但是,可以创建将要设置的属性的白名单。如果设置了可访问属性白名单,则在批量指定期间将不会设置除指定属性之外的其他属性。

这对你有帮助吗?

谨致问候,Hendrik