我正在开发PhpStorm来开发我的Prestashop网站,我无法解决这个问题。我在localhost上工作并成功将PhpStorm连接到我的MySQL服务器。
现在,PhpStorm会抛出“无法解析表'$ {_ DB_PREFIX_} cms'”等警告。 Prestashop使用表名前缀,似乎PhpStorm无法解析那些带前缀的表。
有解决方法吗?
以下是Prestashop-1.6源代码示例:
$sql = 'SELECT c.`id_cms`, cl.`meta_title`, cl.`link_rewrite`
FROM `'._DB_PREFIX_.'cms` c
INNER JOIN `'._DB_PREFIX_.'cms_shop` cs
ON (c.`id_cms` = cs.`id_cms`)
INNER JOIN `'._DB_PREFIX_.'cms_lang` cl
ON (c.`id_cms` = cl.`id_cms`)
WHERE c.`id_cms_category` = '.(int)$id_cms_category.'
AND cs.`id_shop` = '.(int)$id_shop.'
AND cl.`id_lang` = '.(int)$id_lang.
$where_shop.'
AND c.`active` = 1
ORDER BY `position`';
答案 0 :(得分:10)
这不起作用的原因是因为您最有可能只加载一个架构,您需要加载information_schema.*
要执行此操作,请转到右上角的数据库选项卡,然后右键单击并选择属性。
现在,您有一个名为Data Sources and Drivers
的屏幕,它应该在名为General
的标签页上打开,点击第三个名为Schemas
的标签,然后添加information_schema.*
到这个加载的架构列表。
单击“应用”并等待,然后PhpStorm现在将知道您的数据库结构,然后能够智能地与您合作,从而消除所有错误。
答案 1 :(得分:2)
在 $ sql 查询上方添加此注释。 / ** @noinspection SqlResolve * /
这将仅针对该语句取消警告。
答案 2 :(得分:1)
实际上没有办法解决这个问题。但您可以禁用此类警告的检查。
File
> Settings
> Editor
> Inspections
SQL
Unresolved reference
答案 3 :(得分:1)
编辑:作为mentioned here,此问题已在PhpStorm 2018.2中修复,但仅用于常量。
我有一个不涉及丢弃您的IDE的解决方案。 :) 但是,请注意:这是一个丑陋的hack™,没有保证。
假定您已经与PhpStorm中的数据库建立了连接,则为所需的数据库生成ddl(右键单击连接-> SQL脚本->生成DDL到剪贴板):
将内容粘贴到项目内部某处的sql文件中。您可能应该gitignore这个文件。
用您代码中的那个替换该ddl文件中所有表的前缀。使用PhpStorm typehint作为指导。例如,'._DB_PREFIX_.'cms
将变成${_DB_PREFIX_}cms
:
请注意,您可能必须使用反引号,以避免由于大括号而破坏sql语法。
将ddl添加到您的phpstorm项目中:
现在一切正常: