teratail header banner
teratail header banner
質問するログイン新規登録
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

694閲覧

laravelでint型の登録日時を自動で設定させるには?

akasatanaha

総合スコア44

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2023/12/01 01:17

0

0

laravel10を使用しています。

登録日時カラムについてですが、通常 created_at (datetime型)だと思います。
これを regist_date (int型) で、タイムスタンプを登録するようにしたいです。
(既存がそうなっていて、仕方なくこのような仕様になっています)

laravel だと特に変な設定をしなければ、INSERTのときに登録日時、・更新日時が自動で設定されるかと思います。

しかし以下の設定をしても、登録日時(regist_date)に通常の日時(2023-10-01 00:00:00)が設定されてしまいます。

自動で登録日時をint型で登録させることは出来ないでしょうか?

HogeModel.php
const CREATED_AT = 'regist_date';
protected $guarded = [];
protected $casts = [
'regist_date' => 'int',
];

何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

[ChatGPT3.5]により生成された文章です。


Laravelではcreated_atupdated_atなどの自動的に設定される日時カラムは、デフォルトでCarbonインスタンスとして保存されます。そのため、const CREATED_ATで指定するカラムは、Carbonのインスタンスを想定しているため、int型との互換性がありません。

しかし、以下のようにEloquentのモデルでイベントを使用して、登録日時(regist_date)に対してタイムスタンプをint型で手動で設定することができます。

php

1<?php 2 3namespace App\Models; 4 5use Illuminate\Database\Eloquent\Model; 6 7class HogeModel extends Model 8{ 9 protected $guarded = []; 10 11 protected $casts = [ 12 'regist_date' => 'int', 13 ]; 14 15 public static function boot() 16 { 17 parent::boot(); 18 19 static::creating(function ($model) { 20 $model->regist_date = now()->timestamp; 21 }); 22 } 23}

上記のようにcreatingイベントを使用して、新しいレコードが作成される際にregist_dateに現在のタイムスタンプを設定します。これにより、自動でint型のタイムスタンプが登録されるようになります。

なお、この方法はEloquentのイベントを利用していますので、他のモデルイベントとの競合に注意してください。必要に応じて調整してください。

投稿2023/12/02 13:30

編集2023/12/02 13:35
kosetei

総合スコア64

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akasatanaha

2023/12/02 19:42

返信ありがとうございます。 chatgptによる回答のようですが、どのような質問を投げたかよければ教えてもらえますでしょうか
kosetei

2023/12/04 07:17

質問文丸々コピーして、最後に 「回答はmarkdown形式で出力してください。回答のために不足している情報があれば私に質問してください。」 と追記して質問しました。GPT4だとさらに高精度だと思いますよ。
akasatanaha

2023/12/05 10:34

ご回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問