Eloquent'的Model::save()方法有哪些可用选项?


What are the available options for Eloquent's Model::save() method?

Eloquent有一个叫做save()的方法,它接受一个可选的参数数组(选项)。然而,API参考似乎没有解释这些选项是什么。

是否有一个我错过的列表?当然,我可以通过源代码追踪它们(至少我看到了touchtimestamp),但我认为这个问题至少可以作为其他人的参考。

br

$options数组中,您可以禁用特定查询的时间戳:

$item->save([
    'timestamps' => false, // Disable timestamping on insert and update.
    'touch'      => false, // Disable parent timestamping.
]);

参见: Eloquent模型约定:时间戳和触摸父时间戳。
注意:从5.3开始不再支持timestamps选项。

<标题>

如果您查看源代码,您可以看到,在save()方法中,$options变量传递给三个函数:

  • timestamps支持由performInsert()performUpdate()提供。
  • touch支持由finishSave()提供。

timestamps选项

performInsert()performUpdate()将结合模型的$timestamps属性检查$options数组中的timestamps键:

if ($this->timestamps && Arr::get($options, 'timestamps', true))

如果这个表达式为真,它将触及时间戳。

由于$option['timestamps']默认为true,并且它与model属性结合在一起,因此该选项的唯一用途(当它起作用时)是在模型中启用了时间戳,但您希望在特定查询上禁用它。您不能做相反的事情:在模型中禁用时间戳时启用它-这可能违反直觉。

注意:由于5.3中的performInsert()performUpdate()函数不能与$options参数中的值一起工作。

touch选项

如果这个选项被设置为false,它将禁用在模型的$touches属性中设置的父关系的触摸。这个选项默认为true,所以就像timestamps选项一样,它只用于禁用特定查询的时间戳。