在这里真的需要你的帮助。 (我不知道在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实例不会有这个属性。)
答案 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(...)......
这样的东西