在laravel 5上使用查询生成器更新时遇到问题。我试图禁用updated_at,但一直失败。
下面是我的代码:
$query = StockLog::where('stock_id', $id)->whereBetween('created_at', $from, $to])->update(['batch_id' => $max + 1]);
我试过两种方法:第一个在我的模型我设置:
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?
先谢了
6条答案
按热度按时间juud5qan1#
默认情况下,Eloquent会自动维护数据库表中的created_at和updated_at列,只需将这些时间戳列添加到您的表中,Eloquent就会处理剩下的工作。
我并不是真的建议把它们去掉。但是如果你想用下面的方法。
将以下内容添加到您的型号中:
这将禁用时间戳。
EDIT:看起来您希望保留
created_at
字段,您可以覆盖模型中的getUpdatedAtColumn
。使用以下代码:
bq3bfh9z2#
在模型中,添加以下方法:
更新:在Laravel 5.5中:
试着在你的模型中使用这个:
f0brbegy3#
这个公认的答案对我不起作用,但却引导我朝着正确的方向找到了这个解决方案:
xuo3flqw4#
在这种情况下,最好使用***查询生成器***而不是***Eloquent***,因为***查询生成器***不会隐式编辑时间戳字段。使用***查询生成器***的优点是仅针对相关的更新操作,而无需更改所有模型。
在一行中,您可以执行以下操作:
wvmv3b1j5#
你可以使用以下如果你想使它永久关闭。
将以下内容添加到您的模型...
如果你想继续使用created_at,那么添加以下内容。
或使用以下方式...
jmp7cifd6#
在更新之前,您需要添加**-〉toBase()**
例如
对你来说就是