PhpStorm 无法解析多个数据库连接的列

PhpStorm unable to resolve column for multiple database connections

我只使用 PhpStorm 一周左右,到目前为止,我的所有 SQL 查询在设置数据库连接后都运行良好,没有错误。当前代码实际上使用了第二个数据库(一个用于用户,另一个用于特定产品)所以我也在数据库选项卡中添加了该连接,但它仍然给我一个 'unable to resolve column' 警告。

有没有办法查看它查看的是哪个数据库?它可以与多个数据库一起使用吗?还是我做错了什么?

错误如下:

$this->db->setSQL("SELECT T1.*, trunc(sysdate) - trunc(DATE_CHANGED) EXPIRES FROM " . $this->tableName . " T1 WHERE lower(" . $this->primaryKey . ")=lower(:id)")

这也是我的数据库设置 window 的样子,因为有些人遇到参数模式问题导致此错误,但我很确定这不是这里的问题:

使用 PhpStorm 10.0.3

所以简短的回答是它无法将 table 名称作为变量读取,即使它已在上面的变量中设置。我认为 PhpStorm 可以解决这个问题。消除错误的唯一方法是完全关闭 SQL 检查(显然不理想,因为我在整个项目中都使用它)或仅使用文档注释暂时禁用此语句:

/** @noinspection SqlResolve */

希望找到更集中的评论,就像@var 或@method 一样,以帮助告诉 Phpstorm table 应该是什么,这样它仍然可以检查语句的其余部分。就像是: /** @var $this->tableName TABLE_IM_USING */ 也许将来 JetBrains 会添加它或使 PhpStorm 足够聪明以查看上面的变量 3 行。

您也可以使用 Nowdoc/Heredoc 而不是

/** @noinspection SqlResolve */

示例如下

$name = "your name";
$query = <<<SQL
SELECT * FROM user WHERE name LIKE "%$name%" ORDER BY id
SQL;

这两种方法都会使警告消失

您可以在File -> Settings -> Languages & Frameworks -> SQL Resolution Scopes中设置SQL分辨率范围。

这允许您为整个项目提供默认值,并且您可以选择定义到项目中特定路径的特定映射。