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

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

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

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

- Упрощение работы с данными за счет автоматизации связей.
- Минимизация ручного кодирования и SQL-запросов.
- Быстрый доступ к связанным данным через стандартные поля.

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

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

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

[![Без имени.png](https://docs.metabot24.ru/uploads/images/gallery/2025-04/scaled-1680-/BlcNctTATT5uU2D9-bez-imeni.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-04/BlcNctTATT5uU2D9-bez-imeni.png)

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

[![Без имени.png](https://docs.metabot24.ru/uploads/images/gallery/2025-04/scaled-1680-/KLNHumRuXUpSQ0sA-bez-imeni.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-04/KLNHumRuXUpSQ0sA-bez-imeni.png)

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

[![Без имени.png](https://docs.metabot24.ru/uploads/images/gallery/2025-04/scaled-1680-/pXubpb9Jch39psda-bez-imeni.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-04/pXubpb9Jch39psda-bez-imeni.png)

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

[![image.png](https://docs.metabot24.ru/uploads/images/gallery/2025-04/scaled-1680-/p11eCZN2ja6KgOzd-image.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-04/p11eCZN2ja6KgOzd-image.png)

[![image.png](https://docs.metabot24.ru/uploads/images/gallery/2025-04/scaled-1680-/JCL2sARNlNgktyzu-image.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-04/JCL2sARNlNgktyzu-image.png)

[![image.png](https://docs.metabot24.ru/uploads/images/gallery/2025-04/scaled-1680-/h8Zho6McVWzLPjJs-image.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-04/h8Zho6McVWzLPjJs-image.png)

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

<p class="callout warning">В имени поля можно указывать только латиницу (только нижний регистр), цифры и подчеркивание.</p>

<div class="pointer-container" id="bkmrk-%C2%A0"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Копировать ссылку" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>- **Заголовок в интерфейсе** — название поля, которое будет отображаться в интерфейсе;
- **Тип** — тип данных поля **RELATION**;
- **Обязательное поле** — если данная опция включена, то в поле не может быть задано значение NULL;
- **Связываемая таблица** — выпадающий список с кастомными таблицами бизнеса и доступными системными таблицами. Выбор таблицы из списка автоматически заполняет все остальные поля;
- **Алиас связываемой таблицы** — алиас необходим, так как в разных связываемых таблицах фигурируют одинаковые имена полей. Через него можно будет обращаться к полям связанной таблицы (алиас.поле);
- **Поле текущей таблицы** — имя связываемого поля текущей таблицы;
- **Поле связываемой таблицы** — поле по которому будет искаться соответствие с полем текущей таблицы;
- **Использовать данную связь при редактировании поля** — если опция включена, то при редактировании значения физического поля таблицы появляется выпадающий список со значениями из связанной таблицы;

<p class="callout warning">НЕ включайте опцию **Использовать данную связь при редактировании поля** для нескольких связей одного и того же поля текущей таблицы. НЕ включайте данную опцию для JOIN полей второго уровня, так как у такого поля нет физического поля, для его редактирования в текущей таблице.</p>

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

<p class="callout warning">НЕ включайте опцию **Создавать внешний ключ для связи** для нескольких связей одного и того же поля текущей таблицы. НЕ включайте данную опцию для JOIN полей второго уровня.</p>

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

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

<p class="callout info">Если вы хотите создать несколько связей с одной и той же таблицей, добавьте уникальное для таблицы число в алиасе. Например: leads, leads2...</p>

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

[![image.png](https://docs.metabot24.ru/uploads/images/gallery/2025-04/scaled-1680-/V1Di4kh2MXzEDuE6-image.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-04/V1Di4kh2MXzEDuE6-image.png)

<p class="callout warning">При выключении активности физического поля, связанные с ним RELATION поля **продолжат отображаться** в данных таблицы.</p>

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

[![image.png](https://docs.metabot24.ru/uploads/images/gallery/2025-04/scaled-1680-/Kdrnq7WKsjTzQB9C-image.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-04/Kdrnq7WKsjTzQB9C-image.png)

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

[![Без имени.png](https://docs.metabot24.ru/uploads/images/gallery/2025-04/scaled-1680-/K2bZ2UfQWYbF4enO-bez-imeni.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-04/K2bZ2UfQWYbF4enO-bez-imeni.png)

<p class="callout warning">Если что-то настроено некорректно, то при просмотре или редактировании записей таблицы может возникнуть ошибка 500. Попробуйте отключить лишние опции **Использовать данную связь при редактировании поля** и **Создать внешний ключ**, проверьте алиасы и имена полей. Если не получается исправить проблему, обратитесь в поддержку Metabot.</p>

### Уровни вложенности

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

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

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

[![image.png](https://docs.metabot24.ru/uploads/images/gallery/2025-04/scaled-1680-/a1W73MRUTFhlLPJK-image.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-04/a1W73MRUTFhlLPJK-image.png)

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

### Пример

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

[![image.png](https://docs.metabot24.ru/uploads/images/gallery/2025-04/scaled-1680-/cp4r7v8JIbf1v2A1-image.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-04/cp4r7v8JIbf1v2A1-image.png)

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

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

[![image.png](https://docs.metabot24.ru/uploads/images/gallery/2025-04/scaled-1680-/cFqZB9oOBhwqG8B9-image.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-04/cFqZB9oOBhwqG8B9-image.png)

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

<p class="callout info align-left">Со связываемыми полями так же можно работать с помощью JS методов. Все методы и их описание вы можете посмотреть в **[Справочнике по функциям JS](https://docs.metabot24.ru/books/07-spravocnik-po-funkciyam-js/page/spravocnik-vsex-funkcii-Cgt#bkmrk-%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81%C2%A0:~:text=81%25C2%25A0-,%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%20%D1%81%20%D0%BA%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%BD%D1%8B%D0%BC%D0%B8%20%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0%D0%BC%D0%B8,-%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B%20table "Справочник всех функций")**</p>