Вопрос

Загрузить данные в деталь через связанную сущность.

Здравствуйте!

Есть три сущности:

Order (id)

OrderProduct (id, OrderId, usrDocumentId)

usrDocument (id, usrName)

Необходимо на странице Заказы отобразить все Документы, прямой связи между Заказами и Документами нет, т.к. используется связь многие ко многим.

В sql запрос выглядит следующим образом:

Select d.Name

from Order o

join OrderProduct op on op.OrderId = o.id

join Document d on d.id = op.DocumentId

 

Как правильно прописать связь в detailColumn?

            "DocumentsDetail": {
                "schemaName": "DocumentsDetailV2",
                "entitySchemaName": "Document",
                "filter": {
                    "masterColumn": "Id",
                    "detailColumn": "Связь"
                },
            },

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

 

Ответ: в detailColumn  нужно прописать: [OrderProduct:Document:Id].Order

У меня такой же вопрос

6 комментариев
Лучший ответ
Павел, в detailColumn нужно прописать следующее выражение
detailColumn: "[OrderProduct:Order:Id].Document"

 

Вам нужно реализовать Ваш метод фильтрации, добавив свойство 'filterMethod' при объявлении детали и в методах реализовать нужную фильтрацию.

Для примера в базовой конфигурации можете посмотреть реализацию для детали Relationships в AccountPageV2.

Спасибо, думал об этом, но стало не на много легче, т.к. не очень понимаю как перевести sql запрос в формат esq.

            declare orderId = id_заказ
            
            Select d.usrName
            from usrDocument d
            join OrderProduct op on op.DocumentId = d.id
            where op.OrderId = orderId

Павел, в detailColumn нужно прописать следующее выражение
detailColumn: "[OrderProduct:Order:Id].Document"

 

Трефилов Павел Сергеевич,

Выше Александр привел пример построения связей.

Вы можете реализовать Вашу задачу либо способом предложенным мной, либо Александром.

В данном случае решение, предложенное Александром 'более красивое' yes

Спасибо за ответ, но на самом деле правильный запрос выглядит немного иначе. Моя кореневая схема Документы, мне нужно из нее получить Id заказа через промежуточную схему ПродуктыЗаказа.

Связь строится по следующему принципу:

[Имя_присоединяемой_схемы:Имя_колонки_для_связи_присоединяемой_схемы:Имя_колонки_для_связи_текущей_схемы].Колонка_присоединяемой_схемы

Значит связь выглядит так [OrderProduct:Document:Id].Order

Видимо запрос в первом посте ввел в заблуждение Александра.

Трефилов Павел Сергеевич,

Вот в этом и заключается сила community smiley

Совместными усилиями и знаниями нашли самое подходящее решение!

Войдите или зарегистрируйтесь, чтобы комментировать