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

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

Представьте ситуацию: У вас есть интернет-магазин, и вам необходимо получить детальную информацию о заказе. Помимо базовых данных (таких как сумма и дата), вам нужны сведения о клиенте, товарах и их характеристиках. Раньше для этого требовалось писать сложные SQL-запросы или реализовывать дополнительную логику в коде.

Теперь в Metabot достаточно один раз настроить связи между сущностями через интерфейс. После этого вы можете обращаться к связанным данным в коде так же просто, как к обычным полям.

Преимущества такого подхода:

    Упрощение работы с данными за счет автоматизации связей.

    Минимизация ручного кодирования и SQL-запросов.

    Быстрый доступ к связанным данным через стандартные поля.

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

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

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

    Без имени.png

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

    Без имени.png

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

    Без имени.png

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

    image.png

    image.png

    image.png

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

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

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

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

    • Отображаемое поле 1-3 связываемой таблицы — имя поля которое тянется из связанной таблицы;
    • Заголовок отображаемого поля 1-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