Автодополнение SQL кода прямо в редакторе PHPStorm

  • Tutorial
В PHPStorm есть встроенная возможность подключения автодополнения имен таблиц и полей в редакторе кода, однако не все об этом знают.



Если у вас код отображается примерно так, то прошу под кат.

Шаг 1. Подключение базы данных

Устанавливаем курсор в область SQL кода, у меня она выделена красным, и нажимаем Alt+Enter. Выбираем Configure Data Source



В открывшемся окошке выбираем JDBC драйвер, в данном случае MySQL, и, если нужно, нажимаем Click here. Выбираем какую-нибудь папку, где хотим разместить файлы, и нажимаем OK.

После того как шторм скачает драйвер, выбираем JDBC driver class.
В поле Database URL выбираем шаблон и меняем настройки на ваши, также указываем имя пользователя и пароль.

Если все сделали правильно, после нажатия на кнопку Test Connection появится подобное окошко.



Шаг 2. Выбираем SQL Dialects

SQL код в редакторе все еще красный. Бежим в настройки.
File Settings SQL Dialects
Напротив папки или отдельного файла нажимаем на keywords only и выбираем MySQL.
Теперь код в редакторе поменял цвет, и даже наверняка подсветились используемые поля, однако автодополнения все еще нет, точнее оно есть, но там нет ни полей, ни таблиц.



Шаг 3. Добавляем автодополнение

В данном случае этот шаг дела вкуса. Возможно вы не захотите автодополнения полей прямо в редакторе, ведь вы можете редактировать отдельно SQL код.
Для этого установите курсор в область SQL кода, нажмите Alt+Enter и выберите нечто вроде Edit MySQL fragment. В открытой области будет автодополнение полей и таблиц.

Но если вы все-таки решили не останавливаться, то устанавливаем курсор в SQL код, нажимаем Alt+Enter и выбираем Language Injection Settings.
В появившемся окошке щелкаем по php: «SQL select/delete/insert/update/create» и выбираем MySQL.



Все! Должно работать. Еще советую нажать в автодополнении на букву А в нижнем правом углу, если у вас там она, и переключиться на Sort by relevance.

UDP.
Пользователь Ramzeska подсказывает, что последний шаг можно выполнить зайдя в настройки проекта
«Language Inspections» => «PHP SQL select/delete...» ( в выпадающем меню попап-окна надо выбрать MySQL)
Поделиться публикацией

Комментарии 30

    +3
    Только в случае собственных плейсхолдеров я имею кучу ошибок в инспекторе, которые невозможно отключить.
    Тикет: youtrack.jetbrains.com/issue/IDEA-106288
      0
      Котеровская обертка? У меня тоже с ней проблемы. Кстати не рекоммендую ее более использовать. Лучше mysqli. Там есть prepare. В 20 строчек можно довести ее до ума как у Котерова и всех остальных.
        0
        Там уже есть mysqli если что — на форуме в конце ссылки
        Вообще для небольших проектов библиотека хорошая, но ORM у нее нету
          0
          Очень много кода. Можно сделать в разы проще. Вы попробуйте на распберри пи с ней поработать, она очень чувствительна к обьемам кода. 0.5 сек с этой либой обеспечены.
      +4
      Мне бы эту фичу до того как узнал что есть ORM и Database Builder-ы
        0
        Точно точно) читаю, думаю блин, классная штука… а потом понимаю что в сам запрос строится билдером и бессмысленность прочтения(
          0
          Посмотрите это www.querydsl.com/
          +2
          Это делается не так. Неудобно всегда выбирать MySQL через аль-энтер и уж тем более через отдельный редактор. По умолчанию это выставляется в настройках проекта:
          «Language Inspections» => «PHP SQL select/delete...» ( в выпадающем меню попап-окна надо выбрать MySQL)
          И тогда автодополнение сразу начинает работать на любых строчках похожих на sql в проекте
            0
            Спасибо, действительно так лучше
            0
            И если уж совсем вообще говоря, эта функциональность работает во всех IDE, основанных на платформе Intellij IDEA и имеющих поддержку модуля баз данных.
              0
              Была бы возможность задать схему какими-то способами без подключения к БД — было бы вообще хорошо.
                0
                См. мой коммент выше
                  0
                  Это просто автодополнение синтаксиса, но схему оно знать не будет.
                    0
                    В Intellij IDEA после синхронизации схемы базы данных при написании запросов все колонки, которых нет в базе как раз будут подчеркиваться красным.
                0
                А что за тема (та, что на первом скриншоте)?
                  +1
                  darkula, а цвет кода мой
                    0
                    А можешь скинуть куда-нибудь его? А то я что уже только не перепробовал… но у всех есть какие-то фатальные для меня косяки вылазят.
                0
                Плейсхолдер «?» распознаётся, а «!» (стандартный для PEAR DB) — нет, выдаёт ошибку. А сейчас ещё и типизированные плейсхолдеры в моде — как с ними быть?

                Хорошо бы вообще это как-то настраивать… К сожалению, при всей волшебности ваших IDE, настроить какую-то мелочь в них (и не писать при этом полноценный плагин) зачастую невозможно.
                  0
                  Насколько я понимаю, автор не работает в JetBrains, просто поделился опытом.
                  0
                  Товарищи подскажите пожалуйста, понравилась эта настройка, но у меня в коде используются конструкции типа:
                  WHERE
                   $confirm
                  ORDER BY `u`.`id`";
                  

                  Где в переменной хранится кусок SQL кода, который меняется от разных факторов. После включения автодополнения из статьи, эта переменная постоянно подчеркнута красным и обозначена как ошибка, что весьма напрягает. Есть ли способ отключить такую подсветку?
                    –4
                    Вам надо переписать такой код.
                      0
                      $query = "SELECT field FROM table WHERE ".$somevar." LIMIT 0,10";
                      
                        0
                        Не стоит использовать конкатенацию и переменные php для формирования sql кода. Это плохая практика. Используйте pdo и возможности базы данных для исключения/включения опциональных запросов.
                          0
                          PDO может использоваться в этом плане только для подстановки литералов, но не идентификаторов или конструкций языка. Здесь же используется для подстановки именно конструкции (выражения).
                            –1
                            Именно! Но все эти выражения и конструкции языка можно записать также и в SQL виде, что будет более безопасно. А еще можно использовать процедуры внутри SQL.
                        0
                        А еще забыли добавить что есть возможность выполнять произвольный код в отдельной SQL-консоли, и получать сразу результат выполнения.
                          0
                          Да и вообще, что обо всех фичах можно узнать со старницы DataGrip — отдельной IDE для баз, все вомзожнсоти которой, как сказали выше, включены и в другие IDE с поддержкой баз: https://www.jetbrains.com/datagrip/features/

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое