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

Oct*_*xan 2 phpstorm laravel

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

Flight::where('flight_number', $flight_number)->delete();
Run Code Online (Sandbox Code Playgroud)

这几乎就是Laravel网站上记录的内容.如果没有找到删除的记录,我不相信这会抛出错误?

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

axi*_*iac 5

PhpStorm警告你的原因很简单.docblock Illuminate\Database\Eloquent\Model::delete()包含此@throws \Exception注释:

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

PhpStorm并不关心你如何打电话delete()或者是否flight_number属于PK桌子.它无法知道这些事情.所有它知道的是@throws上面提到的注释,它通过提醒你这件事来尝试有用.

您可以忽略该警告,为整个项目禁用它(在"设置" - >"编辑器" - >"检查" - >"错误处理" - >"未处理的异常"中),或者只能为调用该delete()方法的语句禁用它.

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

/** @noinspection PhpUnhandledExceptionInspection */
Run Code Online (Sandbox Code Playgroud)

delete()电话会议前的另一条线路上.这是一个特殊的docblock注释,它告诉PhpStorm忽略可能由其后面的语句抛出的未处理异常.

或者,您可以将插入符号放在delete()通话上,按,然后Alt-Enter从打开的上下文菜单中选择"添加@throws标记" - >"抑制语句".它会为您添加评论.

这是最好的方法,如果您确定delete()不会抛出任何异常(它在模型未正确定义时抛出;这不是运行时错误,而是编码错误;它必须永远不会在模型编码后发生).

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

  • 少量添加(对于OP /其他将面临相同情况的用户):尽量不要使用特定于IDE的错误抑制注释污染您的代码 - 对于其他IDE /编辑用户+整体而言,它看起来不太好(无用)("嘿,而不是处理他忽略它"在阅读带有这些评论的代码时很可能会出现的那种想法". (2认同)
  • PS(一般信息)如果需要(通过使用自定义范围),也可以基于每个文件抑制检查 - 这是为整个项目禁用它的替代方法.它可能在一个地方很烦人(所以你把它关掉)但在另一个地方非常有用 - 比没有它更好... (2认同)