ホームページ  >  記事  >  PHPフレームワーク  >  [整理と共有] Laravel モデルのタイムスタンプを使用するための 8 つのヒント

[整理と共有] Laravel モデルのタイムスタンプを使用するための 8 つのヒント

青灯夜游
青灯夜游転載
2022-09-22 20:18:591675ブラウズ

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

[整理と共有] Laravel モデルのタイムスタンプを使用するための 8 つのヒント

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


1. タイムスタンプを無効にする

データ テーブルにこれら 2 つのフィールドがない場合、データを保存するときに Model::create($arrayOfValues ); ——SQL エラー が表示されます。 Laravel created_at / updated_at を自動入力する場合、これら 2 つのフィールドが見つかりません。

タイムスタンプの自動入力を無効にし、Eloquent Model に前の属性を追加するだけです:

class Role extends Model
{
    public $timestamps = FALSE;

    // ... 其他的属性和方法
}

2. タイムスタンプのデフォルトのリストを変更します

現在、Laravel 以外のタイプのデータベースを使用している場合、つまりタイムスタンプ列の名前が異なる場合はどうなりますか?おそらく、それぞれ create_timeupdate_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_user# など、タイムスタンプは自動的に入力されません。テーブル 役割 ##。

このモデルでは、次のように関係を定義できます:

class User extends Model
{
    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
}
その後、ユーザーにロールを追加する場合は、次のように使用できます:

$roleID = 1;
$user->roles()->attach($roleID);
デフォルトでは、この中央のテーブル

にはタイムスタンプ が含まれません。そして Laravelcreated_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 ソートを使用します。 これに対応して、oldest()

があり、このようにソートされます

created_at ascending

User::oldest()->get();
もちろん、他のものを使用することもできます。指定したフィールドを並べ替えます。たとえば、updated_at を使用したい場合は、次のように実行できます:

$lastUpdatedUser = User::latest('updated_at')->first();
6.
updated_at

# の変更をトリガーしないでください。 ##Eloquent レコードが変更されるたびに、現在のタイムスタンプが 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

は、優れた関係の記録を更新することも望んでいます。

たとえば、

comment が更新された場合、post

テーブルの

updated_at を更新するとします。 次に、モデルで $touches 属性を定義する必要があります:

class Comment extends Model {

    protected $touches = ['post'];

    public function post()
    {
        return $this->belongsTo('Post');
    }

}

8. タイムスタンプ フィールドの自動変換Carbon

Class

最後のヒントですが、すでにご存知のはずなので、リマインダーのようなものです。 デフォルトでは、created_at

フィールドと

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

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。