eloquent 模型上受保护外键的优点

Advantages of guarded foreign keys on eloquent models

我有一个叫 table 的用户。此 table 在另一个名为 projects 的 table 中有一个名为 project_id 的外键。我页面上的用户将看到一个包含所有项目的下拉列表,并且能够 select 其中之一。然后,我将使用 selected 项目的主键作为新创建用户的外键。

现在在 laravel 的 eloquent 模型中,我读到外键应该始终受到保护(不能批量分配)以确保安全。我真的不明白为什么会这样。假设我验证了 project_id 存在于项目 table 中,难道我不应该确信该值是有效的并且现在可以批量分配给 User 模型吗?为什么人们说应该始终保护外键还有其他原因我想念吗?

作为最佳实践,外键应该受到保护,但如果您绝对确定您正在清理您的输入,那么您没有理由不取消保护 project_id

还有其他情况确实应该保留保护 - 例如,您的用户 table 有一个 is_paid_member 字段,表明用户已经支付了真钱来解锁您网站上的某些功能。假设您没有保护该字段,用户转到他的个人资料页面,通过添加 <input type="hidden" name="is_paid_member" value="1"> 字段来操作表单,然后提交表单。

如果您在保存个人资料详细信息时进行批量更新 - 类似于 $user->update($request->input()) 那么用户就可以免费获得一个付费帐户。