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