我只使用PhpStorm大约一周左右,到目前为止,我所有的SQL查询在设置数据库连接后都运行良好且没有错误。这个当前代码实际上使用了第二个数据库(一个用于特定产品的另一个用户),所以我也在数据库选项卡中添加了该连接,但它仍然给我一个“无法解析列”警告。
有没有办法看到它在看什么数据库?它适用于多个数据库吗?或者我做错了什么?
以下错误:
$this->db->setSQL("SELECT T1.*, trunc(sysdate) - trunc(DATE_CHANGED) EXPIRES FROM " . $this->tableName . " T1 WHERE lower(" . $this->primaryKey . ")=lower(:id)")
此外,我的数据库设置窗口看起来像是看到一些人遇到参数模式导致此错误的问题,但我很确定这不是问题所在:
使用PhpStorm 10.0.3
答案 0 :(得分:8)
您可以在File -> Settings -> Languages & Frameworks -> SQL Resolution Scopes
。
这允许您为整个项目提供默认值,您可以选择定义项目中某些路径的特定映射。
答案 1 :(得分:6)
所以简短的回答是它无法将表名作为变量读取,即使它在上面的变量中设置。我认为PhpStorm可以解决这个问题。删除错误的唯一方法是完全关闭SQL检查(显然不是我在整个项目中使用它的理想选择)或仅使用doc注释临时禁用此语句:
/** @noinspection SqlResolve */
希望找到一个更有针对性的评论,就像@var或@method一样,以帮助告诉Phpstorm表应该是什么,所以它仍然可以检查声明的其余部分。就像是:
/** @var $this->tableName TABLE_IM_USING */
也许将来JetBrains会添加它或使PhpStorm足够聪明地查看上面的变量3行。
答案 2 :(得分:1)
您也可以使用Nowdoc / Heredoc而不是
/** @noinspection SqlResolve */
以下是示例
$name = "your name";
$query = <<<SQL
SELECT * FROM user WHERE name LIKE "%$name%" ORDER BY id
SQL;
这两种方法都会使警告消失