PhpStorm не удалось разрешить столбец для нескольких подключений к базе данных


Я использую PhpStorm всего неделю или около того, до сих пор все мои SQL-запросы работали нормально без ошибок после настройки подключения к базе данных. В этом текущем коде фактически используется вторая база данных (одна для пользователей, другая для конкретного продукта), поэтому я также добавил это соединение на вкладке базы данных, но оно по-прежнему выдает мне предупреждение "не удается разрешить столбец".

Есть ли способ узнать, на какую базу данных он смотрит? Будет ли он работать с несколькими базами данных? Или у меня есть сделал что-то еще не так?

Ошибка ниже:

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

Author: LazyOne, 2016-04-22

3 answers

Вы можете задать область разрешения SQL в File -> Settings -> Languages & Frameworks -> SQL Resolution Scopes.

enter image description here

Это позволяет вам задать значение по умолчанию для всего проекта, и вы можете дополнительно определить конкретные сопоставления с определенными путями в проекте.

 4
Author: Paul, 2017-10-05 00:14:22

Таким образом, короткий ответ заключается в том, что он не может прочитать имя таблицы как переменную, даже если оно задано в переменной выше. Я думал, что PhpStorm сможет это решить. Единственный способ устранить ошибку - либо полностью отключить проверку SQL (очевидно, не идеально, поскольку я использую ее в своем проекте), либо временно отключить ее для этого оператора, используя только комментарий к документу:

/** @noinspection SqlResolve */

Надеялся найти более целенаправленный комментарий, похожий на @var или @method, чтобы помочь рассказать Проанализируйте, какой должна быть таблица, чтобы она все еще могла проверять остальную часть заявления. Что-то вроде: /** @var $this->tableName TABLE_IM_USING */ Возможно, в будущем JetBrains добавит это или сделает PhpStorm достаточно умным, чтобы взглянуть на переменную 3 строками выше.

 3
Author: Ben Rhys-Lewis, 2016-05-18 14:51:40

Вы также можете использовать Nowdoc/Heredoc вместо использования

/** @noinspection SqlResolve */

Вот пример

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

Оба метода приведут к исчезновению предупреждения

 0
Author: HendraWD, 2017-01-05 09:55:15