删除 Laravel 中记录的最佳做法? PhpStorm 抛出警告

Best practice in deleting records in Laravel? PhpStorm throws warning

在 PhpStorm 中编写以下代码时会发出警告 "Unhandled \Exception":

Flight::where('flight_number', $flight_number)->delete();

这与 Laravel 网站上的记录几乎完全一致。如果没有发现要删除的记录,我不认为这会引发错误?

这真的应该用一个空的 catch 包裹在 try/catch 中,因为它不是真正的错误吗?特别是因为在我的例子中,如果没有发现要删除的记录就可以了。

PhpStorm 警告您的原因很简单。 Illuminate\Database\Eloquent\Model::delete() 的文档块包含此 @throws \Exception annotation:

/**
 * Delete the model from the database.
 *
 * @return bool|null
 *
 * @throws \Exception
 */
public function delete()

PhpStorm 不关心您如何调用 delete() 或者 flight_number 是否是 table 的 PK。它不可能知道这些事情。它所知道的就是上面提到的 @throws 注释,它试图通过提醒你这件事来发挥作用。

您可以忽略该警告,为整个项目禁用它(在设置 -> 编辑器 -> 检查 -> 错误处理 -> 未处理的异常中),或者您可以仅对调用 [=14 的语句禁用它=]方法。

对于最后一个选项,您可以输入:

/** @noinspection PhpUnhandledExceptionInspection */

delete() 调用之前单独一行。这是一个特殊的文档块注释,它告诉 PhpStorm 忽略它后面的语句可能抛出的未处理异常。

或者,您可以将插入符号放在 delete() 调用上,按 Alt-Enter 并选择 "Add @throws tag" -> "Suppress for statement" 从打开的上下文菜单中。它将为您添加评论。

如果您确定 delete() 不会抛出任何异常(当模型未正确定义时抛出;这不是运行时错误,而是编码错误;它绝不能在模型编码后发生。

另一种使其静音的方法是在包含对 delete() 的调用的函数的文档块中添加 @throws \Exception 注释。这让 PhpStorm 知道异常没有在这个级别处理,当然,如果你没有在调用这个函数的代码中处理异常,它会警告你。