Eloquent 5.4 - HasMany对象质量更新时间戳

时间:2017-06-19 08:21:30

标签: laravel laravel-5 eloquent

在这里真的需要你的帮助。 (我不知道在Eloquent上我想要什么)

让我们假装这种关系:一个用户可以拥有多个孩子

注意:忽略代码中的问题,这只是一个例子。

现在让我们添加一些代码。

// Return HasMany Object Instance from Eloquent.
$hasMany = $user->childs()

// Perform Mass Update.
$hasMany->update(['born_at' => Carbon::now])

到目前为止没有任何问题,第一行返回 HasMany对象Documentation

问题是群发更新会触及我的模型的时间戳( created_at,updated_at ),特别是对于此更新,我不希望它这样做。

在模型上禁用它不是我的选择我正常使用时间戳触摸,但在这种情况下我不想使用。

我都不想迭代集合( $ user-> child ),因为我要更新许多行,并且开销为每个要更新的模型生成一个查询

对于这个问题的答案我的期望是什么:简单,我只想要一种方法来关闭时间戳来进行批量更新或类似的事情。

(通常在单个模型上你可以像这样禁用它: $ model-> timestamps = false ,但这不会在这里工作,因为 hasMany实例不会有这个属性。)

2 个答案:

答案 0 :(得分:0)

您可以将模型的属性默认值设置为false。所以在你的模特课中你会有:

public $timestamps = false;

但是这将永远禁用时间戳,直到使用:

$model->timestamps = true;

答案 1 :(得分:0)

如果有人通过Google找到了这个:

一种可能的解决方案是回退到基础QueryBuilder:

(new Child)
    ->newQuery()
    ->toBase()
    ->where('parent_id', $model->id)
    ->update([
        'born_at' => Carbon::now,
    ]);

当然,人们可以在这里使用像DB :: table(...)......

这样的东西