web-dev-qa-db-ja.com

Laravel-更新時にUpdated Atを無効にする

laravel 5.でクエリビルダーを使用して更新の問題を取得します。5. updated_atを無効にしようとしましたが、失敗し続けます。

これが私のコードです:

    $query = StockLog::where('stock_id', $id)->whereBetween('created_at', $from, $to])->update(['batch_id' => $max + 1]);

私は2つの方法を試しました:私が設定したモデルで最初のもの:

public function setUpdatedAtAttribute($value)
{
    /*do nothing*/
}

二つ目:

$stocklog = new StockLog;
$stocklog->timestamps = false;

$query = $stocklog::where('stock_id', $id)->whereBetween('created_at', [$from, $to])->update([
        'batch_id' => $max + 1]);

どちらも失敗しています。とにかくupdated_atを無効にする方法はありますか?

前もって感謝します

14
ssuhat

デフォルトでは、Eloquentはデータベーステーブルのcreated_at列とupdated_at列を自動的に維持します。これらのタイムスタンプ列をテーブルに追加するだけで、Eloquentが残りを処理します。

それらを削除することはあまりお勧めしません。ただし、次の方法を使用する場合。

以下をmodelに追加します。

public $timestamps = false;

これにより、タイムスタンプが無効になります。

[〜#〜] edit [〜#〜]created_atフィールドを保持したいようですが、モデルのgetUpdatedAtColumnをオーバーライドできます。

次のコードを使用します。

public function getUpdatedAtColumn() {
    return null;
}
26
Akar

モデルに次のメソッドを追加します。

/**
 * @param  mixed  $value
 * @return $this
 */
public function setUpdatedAt($value)
{
    return $this;
}

更新:Laravel 5.5

これをモデルで使用してみてください:

const CREATED_AT = null;
const UPDATED_AT = null;
8
Bald

受け入れられた答えは私にとってはうまくいきませんでしたが、この解決策を正しい方向に導いてくれました:

class Whatever extends Model {
    //...
    const UPDATED_AT=NULL;
    //...

Laravel 5.

6
chiliNUT

永久にオフにしたい場合は、以下を使用できます。

以下をモデルに追加してください...

public $timestamps = false;

そして、created_atを使い続けたい場合は、以下を追加します。

    static::creating( function ($model) {
        $model->setCreatedAt($model->freshTimestamp());
    });

または次のように使用します...

/**
 * Set the value of the "updated at" attribute.
 *
 * @param  mixed  $value
 * @return void
 */
public function setUpdatedAt($value)
{
    $this->{static::UPDATED_AT} = $value;
}
2
vps

この場合、Eloquentの代わりにQuery Builderを使用することをお勧めしますQuery Builderはタイムスタンプフィールドを暗黙的に編集しないためです。 Query Builderを使用すると、すべてのモデルを変更せずに、関連する更新操作のみを対象とするという利点があります。

1行で次のことができます。

$query = \DB::table('stocklogs')->where('stock_id', $id)->whereBetween('created_at', [$from, $to])->update(['batch_id' => $max + 1]);
0
Evrard-c