Страница 1 из 2

Связь один к одному.

Добавлено: 25 апр 2023, 07:51
kurilka
Уважаемые форумчане.

Подскажите, пожалуйста, как в данной программе реализовать связь один к одному между таблицами?

Re: Связь один к одному.

Добавлено: 25 апр 2023, 13:16
support
https://docs.rukovoditel.net.ru/index.php?p=12
Там в видео-обзоре все показал на примере.

Re: Связь один к одному.

Добавлено: 26 апр 2023, 04:24
kurilka
Да, это видео я смотрел. И, вроде как, понимание есть как строятся связи между таблицами:
- Сущность и Сущность Ajax - это связь один ко многим,
- Связанные записи - связь многие ко многим,
а мне необходима связь один к одному. Как это сделать?

Re: Связь один к одному.

Добавлено: 26 апр 2023, 13:09
Antonyous99
Да, собственно, отфильтровать свзяь ОДИН-КО-МНОГИМ.
Например, поставить фильтр (условие в Аякс запросе), чтобы только 1 нужная запись выбиралась.
ID этой записи брать, например, из соотв. поля в той же сущности.
Пожалуй, это самый просто вариант.

Re: Связь один к одному.

Добавлено: 28 апр 2023, 12:42
kurilka
Создал две сущности: Таблица 1 и Таблица 2. В Таблице 2 добавил поле Сущность Ajax, выбрал сущность Таблица 1, добавил условие e.id=[541]. 541 - это id поля Сущность в Таблице 2.
Получилось следующее:
1. Если добавлять новую запись, то фильтр не срабатывает. Как я понимаю, записи ещё нет, поэтому сравнивать не с чем. В результате в списке отображаются все записи из таблицы и, получается, есть вероятность привязать новую запись к уже существующей.
Скрин_1.png
Скрин_1.png (8.84 КБ) 344 просмотра
2. Если редактировать существующую запись, то фильтр срабатывает, однако, если нажать маленький крестик (например промахнуться вместо выпадающего списка), то, видимо, связь между сущностями разрывается и происходит как на скриншоте выше - появляется список всех записей. Т.е. можно перепривязать текущую запись или создать для неё новую запись.
Скрин_2.png
Скрин_2.png (9.27 КБ) 344 просмотра

Вероятно я не до конца разобрался с настройками программы и сделал что-то не так. Подскажите пожалуйста.

Re: Связь один к одному.

Добавлено: 28 апр 2023, 16:05
support
А можете привести практический примере того, что пытаетесь сделать?

Re: Связь один к одному.

Добавлено: 02 май 2023, 08:31
kurilka
Есть объекты с уникальным, для каждого, набором параметров - Сущность 1 и Сущность 2. Есть устройства - Сущность 3, для которых необходимо установить связь с каким-то из объектов. Связь с объектом может меняться. Упрощённая схема реализации этого следующая:
Схема.png
Таблица Сущность 4 формируется автоматически при добавлении объектов и является как бы сводной таблицей сущностей 1 и 2, в которую записываются наименование объекта и ID таблицы сущности. Через эту таблицу задаётся связь для Сущности 3 и SQL запросом подтягиваются необходимые параметры сущности 1 или 2.
Данная схема вполне рабочая, но у неё есть один серьёзный недостаток - возможность случайного (человеческий фактор) изменения связей между записями Сущность 1 - Сущность 4 и Сущность 2 - Сущность 4, описанный чуть выше.

Re: Связь один к одному.

Добавлено: 02 май 2023, 10:40
support
Ну, человеческий фактор всегда присутствует. Используя доступ к полям можно к примеру запретить редактирования связей.

Re: Связь один к одному.

Добавлено: 02 май 2023, 12:23
kurilka
Если я делаю запрет на изменение поля "Наименование" в Сущности 4, то в форме редактирования существующей записи в Сущности 1 или 2 вместо кнопки "Изменить" появляется кнопка "Добавить", так ещё хуже получается.

Пока пробовал разные варианты настроек, понял, что если как-нибудь скрыть маленький крестик в форме,
Скрин_3.png
Скрин_3.png (1.28 КБ) 263 просмотра
чтобы нельзя было разорвать существующую связь, и задать SQL условие null то схема начинает работать практически идеально. Можно это как-то реализовать или добавить такой функционал (скрыть кнопку удалить связь)?

Re: Связь один к одному.

Добавлено: 02 май 2023, 14:56
support
А вы скройте ее с помощью CSS

Код: Выделить всё

#fields_264_rendered_value .select2-container--default .select2-selection--single .select2-selection__clear{
display:none
}
fields_264 замените на ID вашего поля.