web-dev-qa-db-ja.com

Laravel 5のタイムスタンプ(updated_at、created_at)はnullです。

Laravel 5.のupdated_atcreated_atフィールドに問題があります。

これが私の移行です:

Schema::create('lots', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('lot');
    $table->integer('is_active');
    $table->timestamps();
});

しかし、このテーブルにデータを挿入すると、updated_atおよびcreated_atフィールドがnullになります。現在のタイムスタンプでどのように自動補完するのですか?

私はこのようなデータを挿入します:

\DB::table('admin_lots')->insert([
    'lot' => $request->cycle_lot,
    'is_active' => '1',
]);

ありがとう。

8
el valuta

データを挿入するときにEloquentを使用しない可能性があります。この場合、タイムスタンプを手動で追加する必要があります。

これを実行したくないが、タイムスタンプが必要な場合は、 このハックを使用

$table->timestamp('created_at')->default(\DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(\DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));

更新

更新されたコードに基づいて、ここに別のソリューションがあります:

\DB::table('admin_lots')->insert([
                'lot'   => $request->cycle_lot,
                'is_active'     => '1',
                'created_at' = \Carbon\Carbon::now()->toDateTimeString(),
                'updated_at' = \Carbon\Carbon::now()->toDateTimeString()
            ]);
6
Alexey Mezenin

データを直接挿入する場合、Laravelはタイムスタンプを認識しません。insertステートメントで手動でタイムスタンプを設定するか、Eloquentモデルの使用に切り替えて、タイムスタンプを含むあなたのためのボックス。適用可能な場合は、単純なクエリよりも維持する方がはるかに簡単です。

雄弁ORM

5
overburn

laravelでは、insertメソッドの代わりにcreateメソッドを使用する必要があります。 Createメソッドは、created_atおよびupdated_atフィールドのタイムスタンプを自動的に追加します。 User::create(array('name' => 'John'));

5
Rakesh Nandi

モデルにこの行があるかどうかを確認します。

public $timestamps = false;

存在する場合は削除してください。

4

データベースに自動的にタイムスタンプを書き込むには、Laravelの素晴らしいEloquent機能を使用する必要があります...

例を見ると、雄弁のコードは次のようになります。

$lot_inputs = array(
    'lot' => $request->cycle_lot,
    'is_active' => 1
);
$new_lot = Lot::create($lot_inputs);

Eloquentメソッドとそのプロパティを簡単に使用できるように、テーブルのモデル= 'lots'(そしてEloquestを拡張する必要があります)を使用する必要があることに注意してください...

Eloquent ORM を可能な限り使用すると、将来的にDBテクノロジーを変更する場合に、書き込まれた雄弁クエリを再度指定する必要がなくなります(例:変換異なるDB言語へのクエリの実行はEloquentによって自動的に行われます)

ありがとうございます。これが問題の解決に役立つことを願っています。

1
Saumya Rastogi