3

地獄のように混乱している大きな問題があります。私は Laravel (3.2.5 と現在は 3.2.7) を使用しており、データベース (PostgreSQL) の更新には Eloquent ORM を使用しています。

これが私がやっていることです:

  • データでいっぱいのデータベースがあります
  • 外部 API から情報を取得して、データでいっぱいのデータベースを更新しています
  • データでいっぱいのデータベースを配列に入れ、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 変更予定: '.implode(', ',array_keys($updateLinks)));

wtf が発生したことを把握するために、いくつかのログとデバッグ ツールバーを使用しました。情報は次のとおりです。

  • すべての SQL クエリが実行され、正しい情報で更新されます。クエリが phpPgAdmin を介して実行されると、必要に応じて更新されます。ここでの問題は、クエリが変更だけでなく、行のすべての列を更新することです。「fill/save」の代わりに「update」を使用すると、同じ問題が発生します。
  • テーブル情報はまったく更新されません。
  • 最初のログは、link_text が等しくないことを示しています。これは、link_text を更新する必要があることを示しているため、問題ありません。ただし、次にスクリプトを実行したときに何も更新されていないことは明らかです。ログには毎回同じ情報が表示され、ログ イベントが発生する回数だけ表示されます。
  • 2 番目のログは、更新されるはずだったものではなく、オブジェクト全体がダーティであることを示しています。これが、SQL が更新される理由です。
  • 3 番目のログは、更新されるはずの内容を正確に吐き出します。最大 3 ~ 5 列で、それだけです。そして、すべてが正しい形式です。

まず第一に、LaravelがSQLを実行中としてマークし、正しいクエリを表示しているにもかかわらず、データベースが更新されない理由は何ですか?

また、オブジェクト全体が汚れていて、クエリが変更のみ (3-5 列) ではなく、オブジェクト全体 (23 + 列) を更新しようとする理由はありますか?

4

1 に答える 1

2

2 番目の質問について (ダーティな列だけでなく、すべての列が更新される理由)。Laravel のドキュメントには次のように記載されています。

デフォルトでは、すべての属性のキー/値のペアが一括割り当て中に保存されます。ただし、設定される属性のホワイトリストを作成することは可能です。アクセス可能な属性のホワイト リストが設定されている場合、指定された属性以外の属性は一括割り当て中に設定されません。

これは役に立ちますか?

敬具、ヘンドリック

于 2012-09-05T00:01:59.687 に答える