Обходной путь наследования PHP ORM? - PullRequest
0 голосов
/ 22 марта 2011


Я создаю веб-приложение и хотел бы использовать 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 , но он устарел и не работает с текущей версией фреймворка
  • Есть ли другие способы решения проблемы наследования?

Ответы [ 2 ]

1 голос
/ 22 марта 2011

почему бы не использовать поведение Propel i18n ?

1 голос
/ 22 марта 2011

Doctrine 2.0 требует PHP 5.3, но Doctrine 1.2.x отлично работает на PHP 5.2.3 или новее.

...