Запросы с внешними ключами

Для выполнения данных запросов требуется обязательно создать FOREIGN KEY в базе данных, либо указать эту информацию в файле schema.reference, иначе создание JOIN будет невозможно.

Пример файла schema.reference, который храниться в корне RPC — сервиса:

core.pd_users.fn_file->core.cd_files.id
core.cd_route_history.fn_route->core.cd_routes.id
core.cd_route_history.fn_status->core.cs_route_statuses.id
core.cd_route_history.fn_user->core.pd_users.id
core.cd_user_points.fn_point->core.cd_points.id

Для колонок которые объявлены, как fn_[наименование], предварительно нужно завести информацию в schema.reference.

Для вывода значения у foreign key колонки применяется следующее правило:

[foreign key поле]_[имя колонки]
===================================
f_user___c_name
Пример запроса имени пользователя и роли пользователя.
{
"action": "pd_accesses",
"method": "Query",
"data": [
{
"select": "f_user___c_name, f_user___id, f_role___id, c_name",
"page": 1,
"start": 0,
"limit": 25
}
],
"type": "rpc",
"tid": 2
}
Ответ
[
{
"meta": {
"success": true,
"msg": "ok"
},
"result": {
"records": [
{
"f_user__id": 1,
"f_user___name": "Демонстрация",
"f_role___id": 1,
"c_name": "pd_accesses"
}
],
"total": 1
},
"tid": 1,
"type": "rpc",
"method": "Query",
"action": "pd_accesses"
}
]
Фильтрация по foreign key

При фильтрации по f полям, требуется учитывать, что колонка должна содержаться в параметре select (см. f_user___c_name)

{
"action": "accesses",
"method": "Query",
"data": [
{
"select": "f_user___c_name, f_user___id, c_name",
"page": 1,
"start": 0,
"limit": 25,
"filter": [
{
"property": "f_user___name",
"value": "демо",
"operator": "like"
}
]
}
],
"type": "rpc",
"tid": 2
}

В версии 2.1.9 pd-dbcontext добавлена возможность множественного join «запроса».

... 
"select": "f_point___f_user___c_name, f_user___id, c_name"
...

Print Friendly, PDF & Email
Translate »