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

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

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

Связи между таблицами создаются при помощи 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