1

Laravel 3 でビルドされたアプリケーションを持っていますが、非常に奇妙なバグに遭遇しました。と の 2 つの日時フィールドを持つモデルがstart_timeありend_timeます。このモデルではタイムスタンプも有効になっているため、日時フィールドもcreated_atあります。updated_at

このモデル内のオブジェクトの編集/更新を処理するコントローラー アクションがあります。このアクションを実行すると、フィールドを 1 回おきに変更するたびend_timeに、start_timeフィールドはフィールドの分と秒で上書きされupdated_atます。クレイジーに聞こえるかもしれませんが、デバッグ中に行ったことをいくつか示します。

まず、関数の使用から切り替えて、fill_raw($input)何か変なことが起こった場合に備えて手動割り当てを使用し始めました。

    $object->start_time = $start_time;
    $object->end_time = $end_time;
    $object->save();

echoまた、アクション全体にステートメントを追加して、save()関数が呼び出された後にオブジェクトに格納された値を出力するステートメントなど、値がどの時点でも変更されていないことを確認しました。毎回期待通りの値です。ただし、ページがリダイレクトされるアクションの終了時とページのリロード時との間に、値がデータベースで変更されています。

この時点で、たとえば PHPMyAdmin で行を手動で追加すると、日時フィールドNOWが設定されているが入力されてNOT NULLいない場合に日時フィールドが自動入力されることがわかっているため、データベース側で何か奇妙なことがあるに違いないと考えています.しかし、そうは言っても、フィールドが空ではないことをすでに再確認しました。正しい値が含まれています。私はここで行き詰まっており、実際には別の視点を使用することができます.

編集:問題のコントローラー アクションのコピーへのリンクは
次のとおりです。echoアクション全体を通して、入力データが正しく、予期しない方法で変更されていないことを確認するために使用したステートメントがあることを再度指摘します。発生している問題は、アクションの実行後にのみ表示されます。

4

1 に答える 1

1

ON UPDATE CURRENT_TIMESTAMP現在の時刻に更新される列は、節があることと一致しています。

を発行するSHOW CREATE TABLE yourtablenameことで確認できます。

于 2013-10-07T19:21:14.633 に答える