Datamapper (Overzealous Edition), Codeigniter и имеет много разъяснений - PullRequest
2 голосов
/ 17 августа 2010

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

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

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

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

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

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

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

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

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

Это все, что нужно? Это так же просто, как определить переменные $ has_many и $ has_one и вставить имя ассоциированной модели в массив?

Ответы [ 2 ]

1 голос
/ 17 августа 2010

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

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

0 голосов
/ 18 августа 2010

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

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

...