Laravel - 更新时禁用更新时间

ssu*_*hat 14 php laravel laravel-4 laravel-5

在laravel 5上使用查询构建器获取更新问题.我已尝试禁用updated_at但仍然失败.

这是我的代码:

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

我尝试了两种方法:第一种在我的模型中设置:

public function setUpdatedAtAttribute($value)
{
    /*do nothing*/
}
Run Code Online (Sandbox Code Playgroud)

第二个:

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

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

他们俩都失败了.无论如何要禁用updated_at?

提前致谢

Aka*_*kar 26

默认情况下,Eloquent将自动维护数据库表上的created_at和updated_at列.只需将这些时间戳列添加到您的表中,Eloquent将负责其余部分.

我真的不建议删除它们.但是如果你想使用以下方式.

将以下内容添加到您的模型中:

public $timestamps = false;
Run Code Online (Sandbox Code Playgroud)

这将禁用时间戳.

编辑:看起来你想保留该created_at字段,你可以覆盖getUpdatedAtColumn你的模型.

使用以下代码:

public function getUpdatedAtColumn() {
    return null;
}
Run Code Online (Sandbox Code Playgroud)


Bal*_*ald 8

在您的模型中,添加此方法:

/**
 * @param  mixed  $value
 * @return $this
 */
public function setUpdatedAt($value)
{
    return $this;
}
Run Code Online (Sandbox Code Playgroud)


chi*_*NUT 6

接受的答案对我不起作用,但是让我朝着这个解决方案的正确方向前进:

class Whatever extends Model {
    //...
    const UPDATED_AT=NULL;
    //...
Run Code Online (Sandbox Code Playgroud)

Laravel 5.3


Evr*_*d-c 5

在这种情况下,最好使用查询生成器而不是Eloquent,因为查询生成器不会隐式编辑时间戳字段。使用查询生成器的优点是仅针对相关的更新操作,而无需更改所有模型。

在一行中你可以这样做:

$query = \DB::table('stocklogs')->where('stock_id', $id)->whereBetween('created_at', [$from, $to])->update(['batch_id' => $max + 1]);
Run Code Online (Sandbox Code Playgroud)