Я создаю веб-приложение и хотел бы использовать ORM для сопоставления данных из БД с объектами.
Я боролся с этим в течение нескольких дней и пробовал различные реализации, в том числе: Codeigniter ORM, Kohana ORM, PHP.ActiveRecords и Doctrine .
Последние два, которые я не могу использовать, потому что они зависят от PHP 5.3, который не установлен (и не может быть) на моем общем ресурсехостинг-сервер.
Проблема всех этих ORM-ов заключается в наследовании (за исключением Doctrine, но я не могу его использовать).
Я знаю, что многие разработчики просто делают db-s без наследования, новот моя проблема:
Моя база данных должна быть многоязычной, я разработал свою базу данных на следующем примере:
Таблица Product -> id, category_id, price...
(все, что не переводится)
Таблица ProductTranslation-> id, language_id, name, description...
(то же самоеid как продукт, добавляет язык FK и поля, которые можно перевести)
Может быть, есть лучший подход, но мне это очень нравится, потому что он очень гибкий (может добавлять новые языки) и не помещает много NULL-s в БД, также объединение не является таким дорогостоящим, потому что таблицы относительно малы (в отличие от подхода, чтобы поместить все переводы в одну таблицу и ссылаться на эту таблицу из всех других таблиц).
Единственный обходной путь, который я нашел, для поддержки ORM - это поставить has_one
отношение между
Product->ProductTranslation
.
Таким образом, я мог бы получить доступ к переведенным полям с помощью чего-то вроде:
DB::get_product_by_id(4)->translation->name
Не обращайте внимания на синтаксис, но настоящая проблема этого подхода заключается в том, что мне нужно определить новые объекты (модели) для таблиц перевода, и по логике они там не принадлежат.Они не являются сущностями, просто дополнительные данные для сущностей.
Итак, мой вопрос здесь:
- Есть ли лучший способ организации языков в БД, который более ORM дружественный ?
- Существуют ли другие PHP ORM-ы (<5.3), которые поддерживают наследование?- Кстати.Я обнаружил <a href="http://dev.kohanaframework.org/projects/orm-inheritance" rel="nofollow"> модуль ihertiance Kohana ORM , но он устарел и не работает с текущей версией фреймворка
- Есть ли другие способы решения проблемы наследования?