私は、私たちのWebアプリケーションの一つをCodeIgniterからLaravelに変換する過程にあります。しかし、現時点では、updated_at
/created_at
フィールドをすべてのテーブルに追加したくはありません。これをすべて実行するロギングクラスが既にあるためです。
私は$timestamps = false;
を次のように設定できることを知っています。
Vendor\laravel\framework\src\illuminate\Datebase\Eloquent\Model.php
しかし、私はLaravelのコアファイルを変更したくない、または私のモデルの全員にそれを一番上にしてもらわないようにします。すべてのモデルで他の場所でこれを無効にする方法はありますか?
すべてのモデルでpublic $timestamps = false;
を宣言するか、BaseModelを作成してそこで定義し、すべてのモデルでそれを拡張する必要はありません。 Eloquentを使用している場合、ピボットテーブルにはタイムスタンプが必要です。
更新:タイムスタンプはLaravel v3の後のピボットテーブルではもはや必要ではないことに注意してください。
更新:移行から$table->timestamps()
を削除してタイムスタンプを無効にすることもできます。
モデルにpublic $timestamps = false;
を配置するだけです。
Updated_atの更新を無効にするだけでよい場合は、このメソッドをモデルに追加してください。
public function setUpdatedAtAttribute($value)
{
// to Disable updated_at
}
これは親のsetUpdatedAtAttribute()メソッドをオーバーライドします。 created_atは通常どおり動作します。同じ方法で、created_atの更新のみを無効にするメソッドを書くことができます。
もしあなたが5.5.xを使っているなら:
const UPDATED_AT = null;
'created_at'フィールドには、次のものを使用できます。
const CREATED_AT = null;
あなたが最新版であることを確認してください。 (これはLaravel 5.5.0で中断され、5.5.5で再度修正されました)。
雄弁なモデル:
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();
前述のように既存のモデルからタイムスタンプを削除したい場合は、これをモデルに配置します。
public $timestamps = false;
また、up()
メソッドに次のコードを使用して移行を作成し、実行します。
Schema::table('your_model_table', function (Blueprint $table) {
$table->dropTimestamps();
});
$table->timestamps()
メソッドでdown()
を使用してロールバックすることができます。
public
からModel
にfalse
のタイムスタンプ変数を宣言するだけで、すべてうまくいきます。
public $timestamps = false;
この行をモデルに追加してください
既存の変数を上書きします
$timestamps
trueからfalse
/**
* Indicates if the model should be timestamped.
*
* @var bool
*/
public $timestamps = false;
モデル内の関数setUpdatedAt()
とgetUpdatedAtColumn()
をオーバーライドします。
public function setUpdatedAt($value)
{
//Do-nothing
}
public function getUpdatedAtColumn()
{
//Do-nothing
}