#php #sql #json
#php #sql #json
Вопрос:
Я ищу библиотеку для PHP, которая может переводить json в sql. То есть, на основе некоторого определения или схемы, он должен генерировать инструкции insert / update.
Кто-нибудь знает о такой библиотеке? Я задал несколько поисковых систем, и ничего не появилось.
Пример:
JSON
{
"person_id": 1,
"name": "John Doe",
"roles": ["admin","editor","regular_user"],
"friends":
[
{"person_id": 10, "name": "Johny Walker", "is_best_friend": true},
{...} // more friends
]
}
Структура таблицы:
Persons: person_id (int), name (text)
Roles: person_id (int), role (text)
Friends: person_id (int), is_best_friend (bool)
Это всего лишь пример.
Я имею в виду преобразование, подобное XSLT. Я понимаю, что такая система будет довольно сложной, но этот простой пример можно перевести без проблем.
Я думал реализовать это сам, но я ленив, поэтому сначала спрашиваю.
Продвинутые элементы JSON, такие как ссылки, также могут быть реализованы, поскольку они хорошо вписываются в реляционные таблицы (с возможными ограничениями).
Комментарии:
1. Что? Можете ли вы обновить вопрос и добавить текст? Вы говорите о преобразовании модели в модель?
2. Я понимаю, что на самом деле это не касается вашего вопроса, но рассматривали ли вы базу данных, ориентированную на документы, такую как CouchDB ?
3. @Mike Steinert — да, это не очень хорошо сочетается с тем, что я делаю.
Ответ №1:
Структура данных SQL проста и имеет строгую «жестко закодированную» структуру, но JSON может хранить объекты, которые наследуются один в другой. Я не думаю, что такой инструмент существует. Даже если id работает, у него будет много ограничений.
Комментарии:
1. Это простой скрипт, который может отображать любой массив в серию инструкций ВВОДА, без поддержки нескольких таблиц, без сопоставления схемы.
Ответ №2:
Что вам действительно нужно искать, так это ORM.
Типичные программные конструкции сильно отличаются от того, как работает sql, это называется несоответствием объектно-реляционного импеданса. Попытка сопоставить или преобразовать структуру объекта или массива со схемой базы данных не является тривиальной задачей, поскольку требует знаний о двух структурах данных и набора правил для каждого значения.
Комментарии:
1. Спасибо, в настоящее время я использую doctrine, мне это не нравится, поэтому исследую некоторые сумасшедшие идеи.
2. Я тоже использую Doctrine, и я вас понимаю ;). Но я не могу представить ничего другого, что было бы достаточно широким, чтобы стать основой, а не стать полным беспорядком.