Страница 1 из 2
Связь один к одному.
Добавлено: 25 апр 2023, 07:51
kurilka
Уважаемые форумчане.
Подскажите, пожалуйста, как в данной программе реализовать связь один к одному между таблицами?
Re: Связь один к одному.
Добавлено: 25 апр 2023, 13:16
support
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 (8.84 КБ) 344 просмотра
2. Если редактировать существующую запись, то фильтр срабатывает, однако, если нажать маленький крестик (например промахнуться вместо выпадающего списка), то, видимо, связь между сущностями разрывается и происходит как на скриншоте выше - появляется список всех записей. Т.е. можно перепривязать текущую запись или создать для неё новую запись.
- Скрин_2.png (9.27 КБ) 344 просмотра
Вероятно я не до конца разобрался с настройками программы и сделал что-то не так. Подскажите пожалуйста.
Re: Связь один к одному.
Добавлено: 28 апр 2023, 16:05
support
А можете привести практический примере того, что пытаетесь сделать?
Re: Связь один к одному.
Добавлено: 02 май 2023, 08:31
kurilka
Есть объекты с уникальным, для каждого, набором параметров - Сущность 1 и Сущность 2. Есть устройства - Сущность 3, для которых необходимо установить связь с каким-то из объектов. Связь с объектом может меняться. Упрощённая схема реализации этого следующая:
Таблица Сущность 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 (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 вашего поля.