web-dev-qa-db-ja.com

ララヴェルの雄弁なタイムスタンプを無効にする

私は、私たちのWebアプリケーションの一つをCodeIgniterからLaravelに変換する過程にあります。しかし、現時点では、updated_at/created_atフィールドをすべてのテーブルに追加したくはありません。これをすべて実行するロギングクラスが既にあるためです。

私は$timestamps = false;を次のように設定できることを知っています。

Vendor\laravel\framework\src\illuminate\Datebase\Eloquent\Model.php

しかし、私はLaravelのコアファイルを変更したくない、または私のモデルの全員にそれを一番上にしてもらわないようにします。すべてのモデルで他の場所でこれを無効にする方法はありますか?

147
projectxmatt

すべてのモデルでpublic $timestamps = false;を宣言するか、BaseModelを作成してそこで定義し、すべてのモデルでそれを拡張する必要はありません。 Eloquentを使用している場合、ピボットテーブルにはタイムスタンプが必要です。

更新:タイムスタンプはLaravel v3の後のピボットテーブルではもはや必要ではないことに注意してください。

更新:移行から$table->timestamps()を削除してタイムスタンプを無効にすることもできます。

289
bgallagh3r

モデルにpublic $timestamps = false;を配置するだけです。

88
PhilMarc

Updated_atの更新を無効にするだけでよい場合は、このメソッドをモデルに追加してください。

public function setUpdatedAtAttribute($value)
{
    // to Disable updated_at
}

これは親のsetUpdatedAtAttribute()メソッドをオーバーライドします。 created_atは通常どおり動作します。同じ方法で、created_atの更新のみを無効にするメソッドを書くことができます。

19
Sampath Perera

もしあなたが5.5.xを使っているなら:

const UPDATED_AT = null;

'created_at'フィールドには、次のものを使用できます。

const CREATED_AT = null;

あなたが最新版であることを確認してください。 (これはLaravel 5.5.0で中断され、5.5.5で再度修正されました)。

15
Sampath Perera

雄弁なモデル:

class User extends Model    
{      
    protected $table = 'users';

    public $timestamps = false;
}

または単にこれを試してください

$users = new Users();
$users->timestamps = false;
$users->name = 'John Doe';
$users->email = '[email protected]';
$users->save();
7
srmilon

前述のように既存のモデルからタイムスタンプを削除したい場合は、これをモデルに配置します。

public $timestamps = false;

また、up()メソッドに次のコードを使用して移行を作成し、実行します。

Schema::table('your_model_table', function (Blueprint $table) {
    $table->dropTimestamps();
});

$table->timestamps()メソッドでdown()を使用してロールバックすることができます。

5
realplay

publicからModelfalseのタイムスタンプ変数を宣言するだけで、すべてうまくいきます。

public $timestamps = false;

4
Shahrukh Anwar

この行をモデルに追加してください

既存の変数を上書きします$timestampstrueからfalse

/**
 * Indicates if the model should be timestamped.
 *
 * @var bool
 */
public $timestamps = false;
0
Jignesh Joisar

モデル内の関数setUpdatedAt()getUpdatedAtColumn()をオーバーライドします。

public function setUpdatedAt($value)
{
   //Do-nothing
}

public function getUpdatedAtColumn()
{
    //Do-nothing
}
0
Krishan