246

Web アプリケーションの 1 つを CodeIgniter から Laravel に変換中です。ただし、現時点では、updated_at/created_atフィールドをすべてのテーブルに追加する必要はありません。これは、これらすべてをより詳細に行うログ クラスが既にあるためです。

私は設定できることを知っています$timestamps = false;

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

ただし、Laravel のコア ファイルを変更したり、モデルのすべてのコア ファイルを先頭に配置したりしたくありません。すべてのモデルでこれを無効にする方法はありますか?

4

10 に答える 10

166

Model に次の行を配置するだけです。

public $timestamps = false;

以上です!


例:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public $timestamps = false;

    //
}

1 つの操作(コントローラーなど) のタイムスタンプを無効にするには:

$post->content = 'Your content'; 
$post->timestamps = false; // Will not modify the timestamps on save
$post->save();

すべての Models のタイムスタンプを無効にするには、新しいBaseModelファイルを作成します。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class BaseModel extends Model
{
    public $timestamps = false;

    //
}

BaseModel次に、次のように、各モデルを で拡張します。

<?php

namespace App;

class Post extends BaseModel
{
    //
}
于 2014-11-01T13:49:39.383 に答える
15

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

public $timestamps = false;

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

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

メソッドで使用$table->timestamps()してdown()、ロールバックを許可できます。

于 2018-08-31T19:29:15.467 に答える
8

toでpublictimestamps変数を宣言するだけで、すべてがうまく機能します。Modelfalse

public $timestamps = false;

于 2018-07-04T07:50:30.380 に答える
1

タイムスタンプを一時的に無効にすることができます

$timestamps = $user->timestamps;
$user->timestamps=false;   // avoid view updating the timestamp

$user->last_logged_in_at = now();
$user->save();

$user->timestamps=$timestamps;   // restore timestamps
于 2019-09-28T17:55:44.037 に答える