У меня есть следующий вариант использования:
В моем веб-приложении пользователь видит список элементов из нашей БД. Это представление регулируется отделами, к которым принадлежит пользователь, например, iT C и Sysops. Если пользователь не принадлежит к группе, связанной с таблицей, данные этой таблицы не будут загружены в список.
Чтобы отразить эти требования в морфологии БД, у нас есть база данных, которая содержит данные, видимые для ВСЕХ подразделений, и таблицы расширений, связанные с этой таблицей через FK. Взаимосвязь между coretable и extensiontables является взаимно-однозначной, FK всегда хранится в расширенных таблицах.
Теперь данные для пользователя собираются следующим образом:
$join = coretable::with($permittedTables)->find(1);
$permittedTables
- это массив имен расширенных таблиц, доступных пользователю. Теперь вышеприведенный запрос дает мне следующие результаты:
{
"id": 1,
"Internal_key": "TESTKEY_1",
"extensiontable_itc": {
"description": "EXTENSION_iTC_1"
},
"extensiontable_sysops": {
"description": "EXTENSION_SYSOPS_1"
}
}
Этот тип результата можно ожидать, когда пользователь решит обновить запись в БД. Для этого он нажимает на поле, которое он хочет обновить, вносит изменения в поле и затем подтверждает изменения. HTTP-запрос будет содержать ВСЕ поля соответствующей строки в списке в формате JSON. Эти поля, конечно, представляют соответствующие атрибуты из таблиц БД. После декодирования в backend-API с помощью json_decode()
я собираюсь использовать идентификатор, чтобы идентифицировать уязвимую запись в coretable и извлечь модель, как вы видели выше в моем OP.
Теперь есть 2 очень большие вопросы, с которыми я сталкиваюсь:
1) Как я могу просто «массово обновить» полную запись с данными, поступающими из внешнего интерфейса? Вот так (псевдокод):
Model::with($tables)->find($id)->update($updateData);
Это заставит БД обновлять ВСЕ поля соответствующей записи, даже те, в которые не было внесено никаких изменений, но также позволяет мне написать скрипт, который может принимать в любом обновлении любого поля, доступного пользователю.
2) Вид, связанный с первым: структура модели, полученная с помощью
$join = coretable::with($permittedTables)->find($id);
, в основном представляет собой 2 -мерный массив, который будет соответствовать либо другому 2-мерному массиву, поступающему из внешнего интерфейса, если я попытаюсь сделать http-запросы JSON -payload mimi c структурой модели или 1-мерным массивом. Как можно объединить эти два, входящий запрос на обновление и модель из БД, чтобы каждое поле из запроса на обновление было применено к правильному полю в БД? Особенно, если есть столбцы из различных расширенных таблиц с одинаковыми именами. Здесь я должен сказать, что я все еще могу изменить имена столбцов. Поэтому я могу применить к ним «флаг», помечая их как столбец таблицы X, например, «description_it c». Я этого еще не сделал, потому что боялся, что использование такого метода для различения столбцов из разных таблиц считается плохой практикой ^^