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

时间:2018-02-16 15:01:49

标签: laravel phpstorm

在PhpStorm中编写以下代码时,它会警告“Unhandled \ Exception”:

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

这几乎就是它在Laravel网站上的记录。如果没有发现任何记录被删除,我不相信这会引发错误吗?

这真的应该包含在try / catch中,并且空捕获,因为它不是真的错误吗?特别是因为在我的实例中,如果没有发现任何记录被删除就没问题。

1 个答案:

答案 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知道在这个级别上没有处理异常,当然,如果你没有在调用这个函数的代码中处理异常,它会发出警告。