PhpStorm не удалось разрешить столбец для нескольких подключений к базе данных
Я использую 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
3 answers
Таким образом, короткий ответ заключается в том, что он не может прочитать имя таблицы как переменную, даже если оно задано в переменной выше. Я думал, что PhpStorm сможет это решить. Единственный способ устранить ошибку - либо полностью отключить проверку SQL (очевидно, не идеально, поскольку я использую ее в своем проекте), либо временно отключить ее для этого оператора, используя только комментарий к документу:
/** @noinspection SqlResolve */
Надеялся найти более целенаправленный комментарий, похожий на @var или @method, чтобы помочь рассказать Проанализируйте, какой должна быть таблица, чтобы она все еще могла проверять остальную часть заявления. Что-то вроде:
/** @var $this->tableName TABLE_IM_USING */
Возможно, в будущем JetBrains добавит это или сделает PhpStorm достаточно умным, чтобы взглянуть на переменную 3 строками выше.
Вы также можете использовать Nowdoc/Heredoc вместо использования
/** @noinspection SqlResolve */
Вот пример
$name = "your name";
$query = <<<SQL
SELECT * FROM user WHERE name LIKE "%$name%" ORDER BY id
SQL;
Оба метода приведут к исчезновению предупреждения