簡體   English   中英

Laravel(Eloquent)不更新數據庫

[英]Laravel (Eloquent) Not Updating Database

遇到了一個令人困惑的大問題。 我正在使用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列)?

對於你的第二個問題(為什么所有列都更新,而不僅僅是臟的)。 Laravel文檔說明:

默認情況下,所有屬性鍵/值對都將在批量分配期間存儲。 但是,可以創建將要設置的屬性的白名單。 如果設置了可訪問屬性white-list,則在批量分配期間不會設置除指定屬性之外的任何屬性。

這對你有幫助嗎?

親切的問候,亨德里克

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM