2012-03-30 2 views
0

Я настраиваю отношения в своих моделях с помощью DataMapper, но я ударил стену.Codeigniter Datamapper отношения многие-ко-многим

У меня есть класс RealEstate, класс Client и класс Position, который имеет отношение ко многим.

  1. Client может иметь Position 'покупателя' в RealEstate
  2. Same Client может иметь Position 'продавец' в другой RealEstate

Так для данного RealEstate легко найти все Clients s, но как я могу также включить то, что Position у этих клиентов есть для конкретного RealEstate?

ответ

1

Я думаю, что у вас неправильный дизайн. Это действительно должно быть отношение «многие ко многим» между Client и Position, но только отношения «один ко многим» между Position и RealEstate, с один на RealEstate сторона. Он эффективно эмулирует отношения «многие ко многим» между RealEstate и Client, которые имеют дополнительную информацию (Position).

Говоря в терминах предметной области, любая роль (Position) является прилагается к конкретному RealEstate, но любой Client может иметь произвольное количество ролей и любой RealEstate может (?) Есть несколько ролей прилагаются к нему.

У меня нет CodeIgniter 2 на кончиках пальцев, поэтому не могу предоставить образцы кода, но дайте мне знать, если вам это действительно нужно - у меня есть CodeIgniter 2 дома.

+0

Итак, у меня есть класс RealEstate, класс Position и класс Client. В RealEstate есть несколько позиций, прикрепленных к нему (вы можете посмотреть на них как на группы. Эти позиции содержат клиентов. Например, в RealEstate APPARTMENT1 клиент John Doe находится в позиции как владелец. Но он может находиться в другой позиции для другого RealEstate ! в моей базе данных у меня есть - RealEstates - Клиенты - Позиционирует - Clients_Positions (многие ко многим) - Positions_RealEstates (один ко многим) Как я могу получить все клиенты, которые имеют позиции при заданном RealEstate.Если также должна быть таблица Clients_RealEstates? – Simon

+0

Я так не думаю. Необработанный запрос - это что-то вроде 'select * от клиентов c join clients_positions cp где cp.estate_id = $ estate_id'. Я не знаком с CI DataMapper lib, поэтому не могу преобразовать этот запрос в код DataMapper, извините. :) – J0HN

+0

Привет @ J0HN, мне удалось исправить это сам. Таким образом, я нормализовал отношение многих к многим отношениям между Клиентом и Контрактом, имуществом и контрактом, а также положением и контрактом. Таблица контрактов и модель имеют id/foreignkeys всех других объектов и знают, какой из них связан. Спасибо за ваш вклад! – Simon