2016-04-22 106 views
2

我一直在使用PhpStorm大概一周左右,到目前为止,在建立数据库连接后,我的所有SQL查询都正常工作,没有错误。当前的代码实际上使用了第二个数据库(一个用于另一个用于特定产品的用户),所以我在数据库选项卡中添加了该连接,但它仍然给我一个“无法解析列”的警告。PhpStorm无法为多个数据库连接解析列

有没有办法看看它在看什么数据库?它可以用于多个数据库吗?还是我做了其他事情呢?

错误如下:

error message

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

而且,这里是我的数据库设置窗口看起来就像是看到有导致此错误与参数的模式问题,一些人,但我相当肯定不是这里的问题:

database settings

使用PhpStorm 10.0.3

+1

PhpStorm不知道你的表名,因为它是动态设置在一个PHP变量中的:'$ this-> tableName' –

+0

好的。有没有我可以用来告诉它的表名的评论?像使用/ ** @noinspection SqlResolve * /但更聪明一些。表名被设置在课程开始时,它能看不到吗?你会忽略这个错误还是只使用上面的noinspection注释? –

+0

在这种情况下你们会做什么?我来自崇高的文字,这是我的第一个IDE!所以想要学习一个好的系统,并做到“正确”。有没有我可以添加的评论,如用于动态方法的@method? –

回答

3

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

/** @noinspection SqlResolve */ 

当时希望找到一个更加有针对性的评论,就像@var或@method,以帮助告诉Phpstorm该表应该是什么,因此它仍然可以检查其他语句。例如: /** @var $this->tableName TABLE_IM_USING */ 也许在未来,JetBrains将会添加该功能,或者使PhpStorm足够聪明,以查看上面的3行变量。

+0

如何关闭SQL检查? –

0

您可以使用Nowdoc /定界符也代替使用

/** @noinspection SqlResolve */ 

这里是例子

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

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

1

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

enter image description here

这使您可以为整个项目的默认,你也可以定义特定映射到项目中的某些路径。

+0

Thx!所有数据源都不适合我,但我选择了模式(在postgresql数据库中),现在正在工作! –