Laravel(Eloquent)不更新数据库

时间:2012-09-04 14:00:49

标签: php postgresql laravel laravel-3

有一个很大的问题让人感到困惑。我正在使用Laravel(3.2.5和现在的3.2.7),我正在使用Eloquent ORM来更新数据库(PostgreSQL)。

这就是我正在做的事情:

  • 我有一个数据库充满了数据
  • 我从外部API中提取信息以更新我的db数据
  • 我运行一个脚本,将数据库中的数据填充到数组中,与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)));

我使用了一些日志记录和调试工具栏来确定发生的wtf。这是信息:

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

任何想法,首先,即使Laravel将SQL标记为正在运行并显示正确的查询,数据库仍未更新?

此外,任何想法为什么ENTIRE对象是脏的,查询尝试更新整个对象(23列以上)而不是仅更改(3-5列)?

1 个答案:

答案 0 :(得分:2)

对于你的第二个问题(为什么所有列都更新,而不仅仅是脏的)。 Laravel文档说明:

  

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

这对你有帮助吗?

亲切的问候, 亨德里克