2010-08-17 3 views
2

Во-первых, я хотел бы просто указать, что я ORM noob. Я никогда не использовал ORM в своей жизни и достиг точки в моем изо дня в день, развивая, что мне нужно сделать некоторые сумасшедшие передовые отношения, которые, как мне кажется, Datamapper Overzealous Edition может помочь мне, поскольку я использую Codeigniter.Datamapper (Oversealous Edition), Codeigniter и имеет много разъяснений

В моей базе данных У меня есть следующие таблицы;

пользователей
проекты
клиенты
задачи

Вот мои желательные отношения между таблицами;

  • Пользователь может принадлежать многим проектам.
  • Проект может иметь несколько задач, но может иметь только одного клиента.
  • Клиент может иметь множество пользователей и может много проектов
  • Задача может быть только один проект

Я попытался мои модели настройки в каталоге моделей, как говорится в документации имя модели без s на конце, поэтому для пользователей у меня есть модель user.php и так далее.

Я знаю, что документация отличная, но я просто не могу понять ее правильно, хотя она, очевидно, очень проста. Я знаю, что вы создаете модель, например, $ u = new User(); внутри вашего контроллера, но мой вопрос заключается в настройке отношений внутри моделей.

Как установить мои модели, чтобы иметь вышеуказанные отношения, например, когда я получаю задание, я могу видеть, к какому проекту принадлежит, и целую кучу информации из связанных таблиц базы данных.

Я заметил, что в документации вы используете следующую модель проектов, которая должна сказать, что у нее может быть несколько задач для проекта; var $has_many = array('task')

Это все, что с ним связано? Это так же просто, как определение переменных $ has_many и $ has_one и включение связанного имени модели в массив?

ответ

1

Я никогда не использовал этот ОРМ, но я использую Доктрину. Если тот, который вы используете, работает во многом таким же образом, тогда простой ответ на ваш вопрос - да! С помощью Doctrine вы устанавливаете все отношения в классах моделей. ORM будет управлять всем этим для вас. Так, например, если вы создаете экземпляр нового объекта задачи ... $ task = new Task(); Затем вы можете получить доступ к связи с таблицей Project, просто написав $ task-> Project;

Я должен подчеркнуть, что приведенный выше код не написан для datamapper, поэтому он может работать не так, как есть, но я надеюсь, что это очистит вас. Похоже, вы понимаете документацию, но просто не верьте!

+0

Хотя они оба разные ORM, я думаю, что они имеют схожий синтаксис в том, как доступны таблицы и какие данные извлекаются из поля. Я предполагаю, что все ORM следуют той же методологии превращения ваших таблиц базы данных в объекты, и независимо от того, что ORM, базовые методы одинаковы. Datamapper для ссылки другого пользователя написан на Ruby, но я использую его реализацию PHP. Спасибо за вашу помощь, мне просто нужно было успокоиться и понять, что я понимаю документацию. –

0

Это все, что вам нужно сделать, если ваша структура базы данных соответствует планировке, ожидаемой Datamapper Overzealous.

Я использовал этот ОРМ в проекте, который я строил и по большей части, он был чрезвычайно полезным и экономит время.