Laravel - 在更新时禁用更新

2022-08-30 21:35:22

在 laravel 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?

提前致谢


答案 1

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

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

将以下内容添加到模型中

public $timestamps = false;

这将禁用时间戳。

编辑:看起来你想保留字段,你可以覆盖模型中的。created_atgetUpdatedAtColumn

使用以下代码:

public function getUpdatedAtColumn() {
    return null;
}

答案 2

在模型中,添加此方法:

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

更新:在Laravel 5.5中

只需尝试在模型中使用它:

const CREATED_AT = null;
const UPDATED_AT = null;

推荐