如何在PhpStorm中解析带有前缀的SQL表?

时间:2016-01-06 10:57:09

标签: phpstorm prestashop prestashop-1.6

我正在开发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`';

Error in PhpStorm for Mysql tables with prefixes

4 个答案:

答案 0 :(得分:10)

这不起作用的原因是因为您最有可能只加载一个架构,您需要加载information_schema.*

要执行此操作,请转到右上角的数据库选项卡,然后右键单击并选择属性。

现在,您有一个名为Data Sources and Drivers的屏幕,它应该在名为General的标签页上打开,点击第三个名为Schemas的标签,然后添加information_schema.*到这个加载的架构列表。

单击“应用”并等待,然后PhpStorm现在将知道您的数据库结构,然后能够智能地与您合作,从而消除所有错误。

答案 1 :(得分:2)

$ sql 查询上方添加此注释。 / ** @noinspection SqlResolve * /

这将仅针对该语句取消警告。

答案 2 :(得分:1)

实际上没有办法解决这个问题。但您可以禁用此类警告的检查。

  1. 打开File> Settings> Editor> Inspections
  2. 展开SQL
  3. 取消选中Unresolved reference

答案 3 :(得分:1)

编辑:作为mentioned here,此问题已在PhpStorm 2018.2中修复,但仅用于常量


我有一个不涉及丢弃您的IDE的解决方案。 :) 但是,请注意:这是一个丑陋的hack™,没有保证。

  1. 假定您已经与PhpStorm中的数据库建立了连接,则为所需的数据库生成ddl(右键单击连接-> SQL脚本->生成DDL到剪贴板):

    Imgur

  2. 将内容粘贴到项目内部某处的sql文件中。您可能应该gitignore这个文件。

  3. 用您代码中的那个替换该ddl文件中所有表的前缀。使用PhpStorm typehint作为指导。例如,'._DB_PREFIX_.'cms将变成${_DB_PREFIX_}cms

    Imgur

    请注意,您可能必须使用反引号,以避免由于大括号而破坏sql语法。

  4. 将ddl添加到您的phpstorm项目中:

    Imgur

  5. 现在一切正常:

    Imgur