1. タイムスタンプを無効にする
データ テーブルにこれら 2 つのフィールドがない場合、データを保存するときに Model::create($arrayOfValues); が表示されます。 SQLエラー。 Laravel は、created_at / updated_at を自動的に埋めるときに、これら 2 つのフィールドを見つけることができません。 タイムスタンプの自動入力を無効にし、前の属性を Eloquent モデルに追加するだけです:class Role extends Model { public $timestamps = FALSE; // ... 其他的属性和方法 }
2. タイムスタンプのデフォルトのリストを変更します
If Laravel 以外のデータベースを使用していて、タイムスタンプ列の名前が異なる場合はどうすればよいですか?おそらく、それらはそれぞれ create_time と update_time と呼ばれます。おめでとうございます。モデル内で次のように定義することもできます:class Role extends Model { const CREATED_AT = 'create_time'; const UPDATED_AT = 'update_time'; }
3. タイムスタンプの日付/時刻形式を変更します
次の内容は、Laravel の公式ドキュメントを参照しています。 :デフォルトでは、タイムスタンプは自動的に「Y-m-d H:i:s」としてフォーマットされます。カスタムのタイムスタンプ形式が必要な場合は、モデルで $dateFormat プロパティを設定できます。この属性は、データベース内の日付の保存形式と、配列または JSON にシリアル化するときの形式を決定します:class Flight extends Model { /** * 日期时间的存储格式 * * @var string */ protected $dateFormat = 'U'; }
4. 多対多: タイムスタンプ付きの中間テーブル
多対多の関連付けの場合、ユーザー テーブル users とロール テーブル role の間の中間テーブル role_user など、タイムスタンプは自動的に入力されません。 このモデルでは、次のように関係を定義できます:class User extends Model { public function roles() { return $this->belongsToMany(Role::class); } }
$roleID = 1; $user->roles()->attach($roleID);
ただし、タイムスタンプを自動的に保存したい場合は、移行ファイルに created_at/updated_at を追加し、次に ->withTimestamps();## を追加する必要があります。モデル #
public function roles() { return $this->belongsToMany(Role::class)->withTimestamps(); }
タイムスタンプの並べ替えを使用するには、2 つの「ショートカット メソッド」があります。
代わりに:
User::orderBy('created_at', 'desc')->get();
これを行う方が速いです:
User::latest()->get();デフォルトでは、latest() は created_at ソートを使用します。
これに対応して、created_at を昇順に並べ替える Oldest() があります。
User::oldest()->get();
もちろん、他の指定フィールドで並べ替えることもできます。たとえば、updated_at を使用したい場合は、次のようにすることができます:
$lastUpdatedUser = User::latest('updated_at')->first();
の変更をトリガーしないでください。変更すると、現在のタイムスタンプを使用して updated_at フィールドが自動的に維持されます。これは優れた機能です。
しかし、これを実行したくない場合もあります。たとえば、特定の値を追加するとき、これは「行全体の更新」ではないと考えます。
その後、上記のようにすべてを行うことができます - タイムスタンプを無効にするだけです。これは一時的なものであることに注意してください:
$user = User::find(1); $user->profile_views_count = 123; $user->timestamps = false; $user->save();复制代码
前の例とは異なり、他の列を変更せずに updated_at フィールドのみを更新する必要があるかもしれません。
したがって、次のような記述方法は推奨されません:
$user->update(['updated_at' => now()]);##より高速な方法を使用できます:
$user->touch();
別の状況では、現在のデータを更新するだけでなく、モデルの updated_at も、上位関係の記録を更新することを望んでいます。
class Comment extends Model { protected $touches = ['post']; public function post() { return $this->belongsTo('Post'); } }
8. タイムスタンプ フィールドは自動的に Carbon クラス
## に変換されます。 #最後のヒントですが、すでにご存知のはずなので、リマインダーのようなものです。 デフォルトでは、created_at フィールドと updated_at フィールドは自動的に $dates に変換されます。
したがって、Carbon のメソッドを使用するためにそれらを Carbon インスタンスに変換する必要はありません。
例:
$user->created_at->addDays(3); now()->diffInDays($user->updated_at);
プログラミング関連の知識については、
プログラミング ビデオをご覧ください。 !
以上が知っておくべきLaravelモデルのタイムスタンプ使用に関する8つのヒント(コレクション)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。