Laravel 5.のupdated_at
、created_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',
]);
ありがとう。
データを挿入するときに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()
]);
データを直接挿入する場合、Laravelはタイムスタンプを認識しません。insertステートメントで手動でタイムスタンプを設定するか、Eloquentモデルの使用に切り替えて、タイムスタンプを含むあなたのためのボックス。適用可能な場合は、単純なクエリよりも維持する方がはるかに簡単です。
laravelでは、insertメソッドの代わりにcreateメソッドを使用する必要があります。 Createメソッドは、created_atおよびupdated_atフィールドのタイムスタンプを自動的に追加します。 User::create(array('name' => 'John'));
モデルにこの行があるかどうかを確認します。
public $timestamps = false;
存在する場合は削除してください。
データベースに自動的にタイムスタンプを書き込むには、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によって自動的に行われます)
ありがとうございます。これが問題の解決に役立つことを願っています。