ホームページ > 記事 > PHPフレームワーク > [整理と共有] Laravel モデルのタイムスタンプを使用するための 8 つのヒント
以下では、Laravel チュートリアルのコラムで、Laravel モデルのタイムスタンプの使用方法に関する 8 つのヒントを紹介します。使用したことがないかどうかを確認してください。まだ使用していない場合は、集めに来てください。皆さんのお役に立てれば幸いです。
デフォルトでは、Laravel Eloquent
モデルのデフォルト データ テーブルには created_at
と updated_at
が含まれていますフィールドが 2 つあります。もちろん、多くのカスタム構成を作成し、多くの興味深い機能を実装することができます。以下に例を示します。
データ テーブルにこれら 2 つのフィールドがない場合、データを保存するときに Model::create($arrayOfValues ); ——SQL エラー
が表示されます。 Laravel
created_at / updated_at
を自動入力する場合、これら 2 つのフィールドが見つかりません。
タイムスタンプの自動入力を無効にし、Eloquent Model
に前の属性を追加するだけです:
class Role extends Model { public $timestamps = FALSE; // ... 其他的属性和方法 }
現在、Laravel
以外のタイプのデータベースを使用している場合、つまりタイムスタンプ列の名前が異なる場合はどうなりますか?おそらく、それぞれ create_time と update_time と呼ばれます。おめでとうございます。モデル内で次のように定義することもできます:
class Role extends Model { const CREATED_AT = 'create_time'; const UPDATED_AT = 'update_time';
次の内容は、公式 Laravel ドキュメント:
デフォルトでは、タイムスタンプは自動的に 'Y-m-d H:i:s'
としてフォーマットされます。タイムスタンプ形式をカスタマイズする必要がある場合は、モデルで $dateFormat
プロパティを設定できます。このプロパティは、日付がデータベースに保存される形式、および配列または JSON にシリアル化されるときの形式を決定します:
class Flight extends Model { /** * 日期时间的存储格式 * * @var string */ protected $dateFormat = 'U'; }
多対多の関連付けの場合、ユーザー テーブル users とロールの間の中間テーブル 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
を追加し、->withTimestamps();
public function roles()
{
return $this->belongsToMany(Role::class)->withTimestamps();
}
タイムスタンプ ソートの実行
タイムスタンプ ソートを使用するには 2 つの「ショートカット メソッド」があります。
User::orderBy('created_at', 'desc')->get();これは高速です:
User::latest()->get();デフォルトでは、
latest()
はcreated_at ソートを使用します。 これに対応して、oldest()
があり、このようにソートされますcreated_at ascending
User::oldest()->get();もちろん、他のものを使用することもできます。指定したフィールドを並べ替えます。たとえば、updated_at を使用したい場合は、次のように実行できます:
$lastUpdatedUser = User::latest('updated_at')->first();6.
##Eloquent
レコードが変更されるたびに、現在のタイムスタンプが updated_atしかし、これを実行したくない場合もあります。たとえば、特定の値を追加するとき、これは「行全体の更新」ではないと考えます。
次に、上記と同じことを行うことができます - タイムスタンプ
$user = User::find(1); $user->profile_views_count = 123; $user->timestamps = false; $user->save();
7. スタンプとタイムスタンプのみを更新します。関連するタイムスタンプ
$user->update(['updated_at' => now()]);より高速な方法を使用できます:
$user->touch();別の状況では、現在のモデルを更新するだけではない場合もあります。
updated_at
は、優れた関係の記録を更新することも望んでいます。 たとえば、comment が更新された場合、post
テーブルのupdated_at を更新するとします。 次に、モデルで $touches 属性を定義する必要があります:
class Comment extends Model { protected $touches = ['post']; public function post() { return $this->belongsTo('Post'); } }
8. タイムスタンプ フィールドの自動変換
Carbon
デフォルトでは、created_atupdated_at
フィールドは自動的に$dates, に変換されるため、変換する必要はありません。それらを Carbon インスタンスにコピーする、つまり Carbon のメソッドを使用できます。 例:
$user->created_at->addDays(3); now()->diffInDays($user->updated_at);
以上、簡単ですが役立つヒントでした。 英語の元のアドレス: https://laraveldaily.com/8-tricks-with-laravel-timestamps/翻訳アドレス: https://learnku.com/laravel/ t/39353
以上が[整理と共有] Laravel モデルのタイムスタンプを使用するための 8 つのヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。