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

时间:2015-10-01 15:54:22

标签: php laravel-5 eloquent

Eloquent有一个名为save()的方法,它接受一个可选的参数数组(选项)。但是,API reference似乎无法解释这些选项是什么。

我遗失的某个地方是否有名单?我当然可以通过源代码跟踪它们(我至少看到touchtimestamp),但我认为这个问题至少可以作为对其他人的引用。

1 个答案:

答案 0 :(得分:6)

TL;博士

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

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

请参阅: Eloquent Model Conventions: TimestampsTouching Parent Timestamps   注意:自5.3以来,不再支持timestamps选项。

全面审核

如果你看一下你可以看到的source code,那么在save()方法中,$options变量会传递给三个函数:

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

timestamps选项

performInsert()performUpdate()都将使用模型的timestamps属性检查conjuction$options数组中的$timestamps键:

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

如果此表达式为true,则它将触及时间戳。

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

  

注意:由于5.3 performInsert()performUpdate()函数无法使用$options参数中的值。

touch选项

如果此选项设置为false,则会禁用模型$touches属性中的touch of the parent relationships集。此选项默认为true,因此就像timestamps选项一样,它仅用于禁用该特定查询的时间戳。