Пока что мой Backend-API на основе Lumen получает следующие результаты из моего MariaDB:
[{
"Internal_key": "TESTKEY_1",
"extensiontable_itc": {
"description": "EXTENSION_iTC_1"
},
"extensiontable_sysops": {
"description": "EXTENSION_SYSOPS_1"
}
}, {
"Internal_key": "TESTKEY_2",
"extensiontable_itc": {
"description": "EXTENSION_ITC_2"
},
"extensiontable_sysops": {
"description": "EXTENSION_SYSOPS_2"
}
}, {
"Internal_key": "TESTKEY_3",
"extensiontable_itc": {
"description": "EXTENSION_ITC_3"
},
"extensiontable_sysops": {
"description": "EXTENSION_SYSOPS_3"
}
}, {
"Internal_key": "TESTKEY_4",
"extensiontable_itc": {
"description": "EXTENSION_ITC_4"
},
"extensiontable_sysops": {
"description": "EXTENSION_SYSOPS_4"
}
}, {
"Internal_key": "TESTKEY_5",
"extensiontable_itc": {
"description": "EXTENSION_ITC_5"
},
"extensiontable_sysops": {
"description": "EXTENSION_SYSOPS_5"
}
}]
Вы видите выборку из 3 таблиц, одного Coretable и двух расширяемых таблиц. Базовая таблица содержит «Internal_Key», и на нее ссылаются расширяемые таблицы через ее идентификатор, который я объявил скрытым в модели, и поэтому в настоящее время он не отображается в результатах выборки. Строка кода, выполняющая эту выборку, выглядит следующим образом:
$join = coretable::with($permittedTables)->get();
$permittedTables
- это массив имен таблиц, поэтому в принципе любое число и комбинацию расширенных таблиц могут быть выбраны вместе со ссылочными записями из основной таблицы.
Данные в конечном итоге должны быть вставлены в список, похожий на список. Здесь для каждого «Internal_key» должна быть создана строка, в которую будут вставлены все данные, связанные с этим ключом.
У меня все в порядке с текущей структурой данных, поскольку я могу oop просматривать их так, как я хочу, и тем самым извлекать данные в соответствии с потребностями списка. Тем не менее, я хотел бы знать, есть ли способ (ре) организовать его по-другому. Если бы я хотел поместить каждый набор данных из таблиц расширений в тот же «arraylevel», что и соответствующий ему Internal_key, как мне это сделать? Должен ли я изменить способ извлечения данных или переставить данные после извлечения? И в обоих случаях: Какой самый простой и надежный способ сделать это?
РЕДАКТИРОВАТЬ: Еще немного информации о структуре моей БД. Coretable имеет идентификатор в качестве первичного ключа, на который ссылаются в файлах расширений через FK «coretable_id». Вот схема моих внешних ключей для моей БД:
+------------------------------------+-----------------------------+--------------------------------------+--------------------------+------------------------+
| TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | REFERENCED_TABLE_NAME | REFERENCED_COLUMN_NAME |
+------------------------------------+-----------------------------+--------------------------------------+--------------------------+------------------------+
| ad_usersxad_groups | Ad_user_id | fk_ad_groupxad_user | ad_users | id |
| ad_usersxad_groups | Ad_group_id | fk_ad_userxad_group | ad_groups | id |
| extensiontables_registryxad_groups | ad_group_id | fk_ad_groupxextensiontables_registry | ad_groups | id |
| extensiontables_registryxad_groups | extensiontables_registry_id | fk_extensiontables_registryxad_group | extensiontables_registry | id |
| extensiontable_itc | coretable_id | fk_extensiontable_itc_coretable | coretable | id |
| extensiontable_sysops | coretable_id | fk_extensiontable_sysops_coretable | coretable | id |
| inaccessibletable | coretable_id | fk_inaccessibletable_coretable | coretable | id |
+------------------------------------+-----------------------------+--------------------------------------+--------------------------+------------------------+