Связи между таблицами Представьте ситуацию: У вас есть интернет-магазин, и вам необходимо получить детальную информацию о заказе. Помимо базовых данных (таких как сумма и дата), вам нужны сведения о клиенте, товарах и их характеристиках. Раньше для этого требовалось писать сложные SQL-запросы или реализовывать дополнительную логику в коде. Теперь в Metabot достаточно один раз настроить связи между сущностями через интерфейс. После этого вы можете обращаться к связанным данным в коде так же просто, как к обычным полям. Преимущества такого подхода: Упрощение работы с данными за счет автоматизации связей. Минимизация ручного кодирования и SQL-запросов. Быстрый доступ к связанным данным через стандартные поля. Создание связи Связи между таблицами создаются при помощи JOIN полей. JOIN поля создаются в меню Структура таблицы. Существует два способа создания JOIN поля: Нажмите на любую из кнопок Создать. В открывшемся окне выберите тип поля RELATION и наименование связываемого поля. Нажмите на кнопу + напротив связываемого поля. Тип поля и наименование связываемого поля заполнятся автоматически. Помимо уже названных полей в окне создания можно заполнить следующие поля: Активно — если опция отключена, то поле не будет доступно для просмотра и редактирования; Наименование — название поля, которое будет использоваться при обращении к нему методами; В имени поля можно указывать только латиницу (только нижний регистр), цифры и подчеркивание. Заголовок в интерфейсе — название поля, которое будет отображаться в интерфейсе; Тип — тип данных поля RELATION; Обязательное поле — если данная опция включена, то в поле не может быть задано значение NULL; Связываемая таблица — выпадающий список с кастомными таблицами бизнеса и доступными системными таблицами. Выбор таблицы из списка автоматически заполняет все остальные поля; Алиас связываемой таблицы — алиас необходим, так как в разных связываемых таблицах фигурируют одинаковые имена полей. Через него можно будет обращаться к полям связанной таблицы (алиас.поле); Поле текущей таблицы — имя связываемого поля текущей таблицы; Поле связываемой таблицы — поле по которому будет искаться соответствие с полем текущей таблицы; Использовать данную связь при редактировании поля — если опция включена, то при редактировании значения физического поля таблицы появляется выпадающий список со значениями из связанной таблицы; НЕ включайте опцию Использовать данную связь при редактировании поля для нескольких связей одного и того же поля текущей таблицы. НЕ включайте данную опцию для JOIN полей второго уровня, так как у такого поля нет физического поля, для его редактирования в текущей таблице. Отображаемое поле 1-3 связываемой таблицы — имя поля которое тянется из связанной таблицы; Заголовок отображаемого поля 1-3 — заголовок поля которое тянется из связанной таблицы; Создавать внешний ключ для связи — Foreign Key для связи таблиц; НЕ включайте опцию Создавать внешний ключ для связи для нескольких связей одного и того же поля текущей таблицы. НЕ включайте данную опцию для JOIN полей второго уровня. Действие при обновлении: Каскад — автоматически обновлять ссылающиеся друг на друга записи в связанных таблицах; Запрет — невозможно обновить запись в связанной таблице, если есть записи ссылающиеся на этот товар в другой таблице; Установить в NULL — установить значение NULL при обновлении связанной записи; Действие при удалении: Каскад — автоматически удалять ссылающиеся друг на друга записи в связанных таблицах; Запрет — невозможно удалить запись в связанной таблице, если есть записи ссылающиеся на этот товар в другой таблице; Установить в NULL — установить значение NULL при удалении связанной записи; Значение по умолчанию — предустановленное значение поля; Размер — максимальное количество символов в данном поле; Точность — количество символов в числе после точки; Подсказка в интерфейсе — подсказка отображаемая в интерфейса в режиме просмотра и редактирования данных; Всплывающая подсказка в интерфейсе — подсказка в интерфейсе, возникающая при наведении мышкой на знак вопроса рядом с полем. После заполнения всех обязательных полей (Наименование, Заголовок в интерфейсе, Связываемая таблица, Алиас, Поле связываемой таблицы) нажмите на кнопку Сохранить. Поле появится в таблице Структура. Если вы хотите создать несколько связей с одной и той же таблицей, добавьте уникальное для таблицы число в алиасе. Например: leads, leads2... Записи в таблицах имеют кликабельные ссылки на записи, на которые они ссылаются. Поля с ссылками выделены синим цветом. При выключении активности физического поля, связанные с ним RELATION поля продолжат отображаться в данных таблицы. Так на скриншоте выше поле Лид содержит ссылку на соответствующую запись в системной таблице лидов, а поле Название ссылку на соответствующую запись о товаре. При редактировании записи в ссылающейся таблице связанные поля изменяются с помощью выпадающих списков. Если что-то настроено некорректно, то при просмотре или редактировании записей таблицы может возникнуть ошибка 500. Попробуйте отключить лишние опции Использовать данную связь при редактировании поля и Создать внешний ключ, проверьте алиасы и имена полей. Если не получается исправить проблему, обратитесь в поддержку Metabot. Уровни вложенности Связанные поля имеют неограниченный уровень вложенности. Рассмотрим на примере: В таблице orders есть поле lead_id; В той же таблице создается RELATION поле lead ссылающееся на таблицу leads поле id, которое обращается к leads.name и leads.person_id; В той же таблице orders создается RELATION поле person ссылающееся на таблицу person поле id на основе подтянутого связанного поля leads.person_id. Так будут выглядеть настройки данного поля: В Поле текущей таблицы записывается не физическое поле таблицы, а поле доставаемое из таблицы лидов. В таких многоуровневых JOIN полях обязательно должны быть выключены опции Использовать данную связь при редактировании поля и Создать внешний ключ. Пример 1. В вашем боте есть таблица заказов orders. 2. Вам требуется узнать id персоны лида через эту таблицу. Чтобы это сделать можно связать поле lead_id с системной таблицей лидов. 3. Для этого создается JOIN поле lead с типом RELATION описывающее связь между полем lead_id таблицы заказов и полем id в системной таблице лидов. 4. Теперь при обращении из JS методов вы можете обратиться к данным лида напрямую из таблицы заказов. Со связываемыми полями так же можно работать с помощью JS методов. Все методы и их описание вы можете посмотреть в Справочнике по функциям JS