80

タイムスタンプに触れずにユーザーを更新することはできますか?

タイムスタンプを完全に無効にしたくありません..

グッツ

4

9 に答える 9

28

Laravelでは、 public フィールドを次のように5.2設定できます。$timestampsfalse

$user->timestamps = false;
$user->name = 'new name';
$user->save();

save()または、関数のパラメーターとしてオプションを渡すことができます。

$user->name = 'new name';
$user->save(['timestamps' => false]);

\Illuminate\Database\Eloquent\Modelそれがどのように機能するかをより深く理解するには、メソッド内のクラスを見ることができますperformUpdate(Builder $query, array $options = []):

protected function performUpdate(Builder $query, array $options = [])
    // [...]

    // First we need to create a fresh query instance and touch the creation and
    // update timestamp on the model which are maintained by us for developer
    // convenience. Then we will just continue saving the model instances.
    if ($this->timestamps && Arr::get($options, 'timestamps', true)) {
        $this->updateTimestamps();
    }

    // [...]

timestampsタイムスタンプ フィールドは、public プロパティが等しいtrueか、Arr::get($options, 'timestamps', true)返された場合にのみ更新されます (配列に key が含まれていないtrue場合、デフォルトで更新されます)。$optionstimestamps

これら 2 つのいずれかが を返すとすぐfalseに、timestampsフィールドは更新されません。

于 2016-03-08T05:59:30.257 に答える
18

アントニオ・カルロス・リベイロの答えに追加するには

コードで 50% 以上の時間でタイムスタンプの非アクティブ化が必要な場合は、自動更新を無効にして手動でアクセスする必要があります。

雄弁なモデルを拡張すると、雄弁にタイムスタンプを無効にすることができます

アップデート

public $timestamps = false;

モデル内。

于 2014-04-25T12:43:51.737 に答える
10

呼び出しを実行しようとしているLaravel 5.xユーザーのModel::update()場合、それを機能させるために使用できます

Model::where('example', $data)
     ->update([
       'firstValue' => $newValue,
       'updatedAt' => \DB::raw('updatedAt')
     ]);

Model::update 関数はもう 2 番目の引数を取りません。参照:laravel 5.0 API

バージョン 5.2 でテストされ、動作しています。

于 2017-03-03T16:55:39.600 に答える
5

結合を伴う一括更新を行う必要がある状況に遭遇したため、updated_at重複する列の競合が発生していました。スコープを必要とせずにこのコードで修正しました:

$query->where(function (\Illuminate\Database\Eloquent\Builder $query) {
    $query->getModel()->timestamps = false;
})
于 2017-03-26T20:28:36.903 に答える
4

Larvel 5.1 では、次の構文も使用できます。

Model::where('Y', 'X')
    ->update(['Y' => 'Z'], ['timestamps' => false]);
于 2017-02-15T14:59:56.120 に答える