知っておくべきLaravelモデルのタイムスタンプ使用に関する8つのヒント(コレクション)

青灯夜游
リリース: 2022-02-16 11:00:58
転載
2802 人が閲覧しました

Laravel の次のチュートリアル コラムでは、Laravel モデルのタイムスタンプの使用方法に関する 8 つのヒントを紹介します。これまでにタイムスタンプを使用したことがないかどうかを確認してください。まだ使用していない場合は、ぜひお越しください。今すぐ集めてください。皆さんのお役に立てれば幸いです。

知っておくべきLaravelモデルのタイムスタンプ使用に関する8つのヒント(コレクション)

デフォルトでは、Laravel Eloquent モデルのデフォルト データ テーブルには、created_at と updated_at という 2 つのフィールドがあります。もちろん、多くのカスタム構成を作成し、多くの興味深い機能を実装することができます。以下に例を示します。

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);
ログイン後にコピー

デフォルトでは、この中央のテーブルにはタイムスタンプが含まれません。そして、Laravel は created_at/updated_at を自動的に埋めようとしません。

ただし、タイムスタンプを自動的に保存したい場合は、移行ファイルに created_at/updated_at を追加し、次に ->withTimestamps();## を追加する必要があります。モデル #

public function roles()
{
  return $this->belongsToMany(Role::class)->withTimestamps();
}
ログイン後にコピー

5 の関連付け。タイムスタンプの並べ替えには、latest() と Oldest() を使用します。

タイムスタンプの並べ替えを使用するには、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();
ログイン後にコピー

6. Eloquent レコードが更新されているときは、updated_at

の変更をトリガーしないでください。変更すると、現在のタイムスタンプを使用して updated_at フィールドが自動的に維持されます。これは優れた機能です。

しかし、これを実行したくない場合もあります。たとえば、特定の値を追加するとき、これは「行全体の更新」ではないと考えます。

その後、上記のようにすべてを行うことができます - タイムスタンプを無効にするだけです。これは一時的なものであることに注意してください:

$user = User::find(1);
$user->profile_views_count = 123;
$user->timestamps = false;
$user->save();复制代码
ログイン後にコピー

7. タイムスタンプと関連するタイムスタンプのみを更新します

前の例とは異なり、他の列を変更せずに updated_at フィールドのみを更新する必要があるかもしれません。

したがって、次のような記述方法は推奨されません:

$user->update(['updated_at' => now()]);

##より高速な方法を使用できます:

$user->touch();

別の状況では、現在のデータを更新するだけでなく、モデルの updated_at も、上位関係の記録を更新することを望んでいます。

たとえば、コメントが更新された場合、post テーブルの updated_at を更新するとします。

次に、モデルで $touches 属性を定義する必要があります:

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:juejin.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート