Перейти к основному контенту

Связи между таблицами

Создание связи

Связи между таблицами создаются при помощи JOIN полей.

JOIN поля создаются в меню Структура таблицы.

Без имени.png

Существует два способа создания JOIN поля:

Без имени.png

    • Нажмите на любую из кнопок Создать. В открывшемся окне выберите тип поля RELATION и наименование связываемого поля.
    • Нажмите на кнопу + напротив связываемого поля. Тип поля и наименование связываемого поля заполнятся автоматически.

    Без имени.png

    Помимо уже названных полей в окне создания можно заполнить следующие поля:

    image.png

    image.png

    image.png

    • Активно — если опция отключена, то поле не будет доступно для просмотра и редактирования;
    • Наименование — название поля, которое будет использоваться при обращении к нему методами;

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

     
    • Заголовок в интерфейсе — название поля, которое будет отображаться в интерфейсе;
    • Тип — тип данных поля RELATION;
    • Обязательное поле — если данная опция включена, то в поле не может быть задано значение NULL;
    • Связываемая таблица — выпадающий список с кастомными таблицами бизнеса и доступными системными таблицами. Выбор таблицы из списка автоматически заполняет все остальные поля;
    • Алиас связываемой таблицы — алиас необходим, так как в разных связываемых таблицах фигурируют одинаковые имена полей. Через него можно будет обращаться к полям связанной таблицы (алиас.поле);
    • Поле текущей таблицы — имя связываемого поля текущей таблицы;
    • Поле связываемой таблицы — поле по которому будет искаться соответствие с полем текущей таблицы;
    • Использовать данную связь при редактировании поля — если опция включена, то при редактировании значения физического поля таблицы появляется выпадающий список со значениями из связанной таблицы;

    НЕ включайте опцию Использовать данную связь при редактировании поля для нескольких связей одного и того же поля текущей таблицы. НЕ включайте данную опцию для JOIN полей второго уровня, так как у такого поля нет физического поля, для его редактирования в текущей таблице.

      Отображаемое поле 11-3 связываемой таблицы — имя поля которое тянется из связанной таблицы; Заголовок отображаемого поля 11-3 — заголовок поля которое тянется из связанной таблицы; Создавать внешний ключ для связи — Foreign Key для связи таблиц;

      НЕ включайте опцию Создавать внешний ключ для связи для нескольких связей одного и того же поля текущей таблицы. НЕ включайте данную опцию для JOIN полей второго уровня.

        Действие при обновлении: 
          Каскад — автоматически обновлять ссылающиеся друг на друга записи в связанных таблицах; Запрет — невозможно обновить запись в связанной таблице, если есть записи ссылающиеся на этот товар в другой таблице; Установить в NULL — установить значение NULL при обновлении связанной записи; Действие при удалении: 
            Каскад — автоматически удалять ссылающиеся друг на друга записи в связанных таблицах; Запрет — невозможно удалить запись в связанной таблице, если есть записи ссылающиеся на этот товар в другой таблице; Установить в NULL — установить значение NULL при удалении связанной записи; Значение по умолчанию — предустановленное значение поля; Размер — максимальное количество символов в данном поле; Точность — количество символов в числе после точки; Подсказка в интерфейсе — подсказка отображаемая в интерфейса в режиме просмотра и редактирования данных; Всплывающая подсказка в интерфейсе — подсказка в интерфейсе, возникающая при наведении мышкой на знак вопроса рядом с полем.

            После заполнения всех обязательных полей (Наименование, Заголовок в интерфейсе, Связываемая таблица, Алиас, Поле связываемой таблицы) нажмите на кнопку Сохранить. Поле появится в таблице Структура.

            Если вы хотите создать несколько связей с одной и той же таблицей, добавьте уникальное для таблицы число в алиасе. Например: leads, leads2...

            Записи в таблицах имеют кликабельные ссылки на записи, на которые они ссылаются. Поля с ссылками выделены синим цветом.

            image.png

            При выключении активности физического поля, связанные с ним RELATION поля продолжат отображаться в данных таблицы.

            Так на скриншоте выше поле Лид содержит ссылку на соответствующую запись в системной таблице лидов, а поле Название ссылку на соответствующую запись о товаре.

            image.png

            При редактировании записи в ссылающейся таблице связанные поля изменяются с помощью выпадающих списков.

            Без имени.png

            Если что-то настроено некорректно, то при просмотре или редактировании записей таблицы может возникнуть ошибка 500. Попробуйте отключить лишние опции Использовать данную связь при редактировании поля и Создать внешний ключ, проверьте алиасы и имена полей. Если не получается исправить проблему, обратитесь в поддержку Metabot.

            ПримерУровни вложенности

            Связанные поля имеют неограниченный уровень вложенности. Рассмотрим на простом примере:

              В таблице orders есть поле lead_id; В той же таблице создается RELATION поле lead ссылающееся на таблицу leads поле id, которое обращается к leads.name и leads.person_id; В той же таблице orders создается RELATION поле person ссылающееся на таблицу person поле id на основе подтянутого связанного поля leads.person_id.

              Так будут выглядеть настройки данного поля:

              image.png

              В Поле текущей таблицы записывается не физическое поле таблицы, а поле доставаемое из таблицы лидов. В таких многоуровневых JOIN полях обязательно должны быть выключены опции Использовать данную связь при редактировании поля и Создать внешний ключ.

              Пример

              1. В вашем боте есть таблица лидов заказов orders.

              image.png

              2. Вам требуется узнать id персоны лида через эту таблицу. Чтобы это сделать можно связать поле lead_id с системной таблицей лидов.

              3. Для этого создается JOIN поле lead с типом RELATION описывающее связь между полем lead_id таблицы заказов и полем id в системной таблице лидов.

              image.png

              4. Теперь при обращении из JS методов вы можете обратиться к данным лида напрямую из таблицы заказов.

              Со связываемыми полями так же можно работать с помощью JS методов. Все методы и их описание вы можете посмотреть в Справочнике по функциям JS