有一个很大的问题让人感到困惑。我正在使用Laravel(3.2.5和现在的3.2.7),我正在使用Eloquent ORM来更新数据库(PostgreSQL)。
这就是我正在做的事情:
$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。这是信息:
任何想法,首先,即使Laravel将SQL标记为正在运行并显示正确的查询,数据库仍未更新?
此外,任何想法为什么ENTIRE对象是脏的,查询尝试更新整个对象(23列以上)而不是仅更改(3-5列)?
答案 0 :(得分:2)
对于你的第二个问题(为什么所有列都更新,而不仅仅是脏的)。 Laravel文档说明:
默认情况下,所有属性键/值对都将在批量分配期间存储。但是,可以创建将要设置的属性的白名单。如果设置了可访问属性white-list,则在批量分配期间不会设置除指定属性之外的任何属性。
这对你有帮助吗?
亲切的问候, 亨德里克