在 PhpStorm 中编写以下代码时,它会警告“Unhandled\Exception”:
Flight::where('flight_number', $flight_number)->delete();
这几乎与 Laravel 网站上的记录完全一致。如果没有发现删除记录,我不相信这会引发错误?
这真的应该被包装在一个 try/catch 中,并带有一个空的 catch 吗,因为它实际上并不是一个错误?特别是在我的实例中,如果没有发现任何记录被删除就很好。
最佳答案
PhpStorm 警告您的原因很简单。 Illuminate\Database\Eloquent\Model::delete()
的文档 block 包含此 @throws \Exception
annotation :
/**
* Delete the model from the database.
*
* @return bool|null
*
* @throws \Exception
*/
public function delete()
PhpStorm 并不关心您如何调用 delete()
或 flight_number
是否是表的 PK
。它不可能知道这些事情。它所知道的只是上面提到的 @throws
注释,并且它试图通过提醒您这件事来发挥作用。
您可以忽略该警告,为整个项目禁用它(在“设置”->“编辑器”->“检查”->“错误处理”->“未处理的异常”中),或者您可以仅针对调用 delete( )
方法。
对于最后一个选项,您可以输入:
/** @noinspection PhpUnhandledExceptionInspection */
在 delete()
调用之前单独一行。这是一个特殊的文档 block 注释,它告诉 PhpStorm 忽略其后面的语句可能引发的未处理的异常。
或者,您可以将插入符号放在 delete()
调用上,按 Alt-Enter 并选择“添加 @throws 标记”->“抑制 for 语句”从打开的上下文菜单。它会为您添加评论。
如果您确定 delete()
不会抛出任何异常(当模型未正确定义时会抛出;这不是运行时错误,而是编码错误),这是最好的方法错误;模型编码后绝不能发生)。
另一种使其静音的方法是在包含对 delete()
调用的函数的文档 block 中添加 @throws\Exception
注释。这让 PhpStorm 知道该异常没有在此级别进行处理,当然,如果您没有在调用此函数的代码中处理异常,它会警告您。
关于laravel - Laravel 中删除记录的最佳实践? PhpStorm 抛出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48829468/