Laravel -更新时禁用更新时间

e0uiprwp  于 2023-01-27  发布在  其他
关注(0)|答案(6)|浏览(298)

在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?
先谢了

juud5qan

juud5qan1#

默认情况下,Eloquent会自动维护数据库表中的created_at和updated_at列,只需将这些时间戳列添加到您的表中,Eloquent就会处理剩下的工作。
我并不是真的建议把它们去掉。但是如果你想用下面的方法。
将以下内容添加到您的型号中:

public $timestamps = false;

这将禁用时间戳。

EDIT:看起来您希望保留created_at字段,您可以覆盖模型中的getUpdatedAtColumn

使用以下代码:

public function getUpdatedAtColumn() {
    return null;
}
bq3bfh9z

bq3bfh9z2#

在模型中,添加以下方法:

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

更新:在Laravel 5.5中

试着在你的模型中使用这个:

const CREATED_AT = null;
const UPDATED_AT = null;
f0brbegy

f0brbegy3#

这个公认的答案对我不起作用,但却引导我朝着正确的方向找到了这个解决方案:

class Whatever extends Model {
    //...
    const UPDATED_AT=NULL;
    //...
  • 拉腊维尔5.3*
xuo3flqw

xuo3flqw4#

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

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

wvmv3b1j5#

你可以使用以下如果你想使它永久关闭。
将以下内容添加到您的模型...

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;
}
jmp7cifd

jmp7cifd6#

在更新之前,您需要添加**-〉toBase()**
例如

Model::query()->where([...])->toBase()->update([...]);

对你来说就是

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

相关问题