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

ale*_*exw 5 php eloquent laravel-5

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

某个地方是否有我遗失的清单?我可以追踪他们失望过当然(我看到的源代码touchtimestamp,至少),但我至少是想通这个问题会像给别人参考价值.

tot*_*dli 6

TL;博士

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

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

请参阅: 雄辩的模型约定:时间戳触摸父时间戳.
注意:自5.3以来,timestamps不再支持该选项.

全面审查

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

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

timestamps选项

双方performInsert()performUpdate()会检查timestamps的重点$options在阵列一起选择$timestamps模型的属性:

if ($this->timestamps && Arr::get($options, 'timestamps', true))
Run Code Online (Sandbox Code Playgroud)

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

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

注:由于5.3performInsert()performUpdate()功能不会在价值观工作$options参数.

touch选项

如果此选项设置为false,则将禁用触摸模型$touches属性中设置的父关系.此选项默认为true,因此就像timestamps选项一样,它仅用于禁用该特定查询的时间戳.