CakePHP: перевод «наследования» базы данных в модели / контроллеры приложений - PullRequest
1 голос
/ 18 февраля 2011

В настоящее время я проектирую базу данных для системы, содержащей несколько различных типов пользователей.Моя схема выглядит следующим образом:

## Users

id INT
name VARCHAR(60)
email VARCHAR(60)

## Doctors

id INT
user_id INT
specialism VARCHAR(60)
qualification_id INT

По сути, таблица Doctors является дочерней по отношению к таблице Users.

Теперь, когда я создаю свои модели, контроллеры и модели в Cake, я подумал, что было бы логично создать модель User, а затем создать ее подкласс с моделью Doctor .Но, похоже, это не работает при тестировании с $ scaffold (у 'есть один' , а 'относится к' , отношения работают относительно хорошо, но в этом случае я бы не стал создавать подклассыклассы Users).

Какой подход вы бы предложили для базы данных, спроектированной таким образом?

Ответы [ 4 ]

4 голосов
/ 18 февраля 2011

CakePHP не предназначен для этого. CakePHP использует шаблон ActiveRecord. Этот шаблон прекрасно работает, когда ваши модели примерно совпадают с таблицами базы данных. Но это ломается, когда вы хотите настроить свои модели так, как вы пытаетесь это сделать сейчас. Для вашей настройки вам понадобится что-то вроде шаблона Data Mapper (реализованного, например, Zend_Db).

В вашем случае я бы просто настроил User и Docter как две отдельные модели с отношением hasOne / ownTo. Намного легче плыть по течению Cake-ish, чем бороться с ним.

3 голосов
/ 28 июля 2011

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

0 голосов
/ 17 июля 2015

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

Он работает как CakePHP 3.0 с объектами, которые представляют идентификатор / модель, но он намного более продвинут и поддерживает наследование нескольких таблиц и наследование одной таблицы.

Проверьте это: Erobwen / Крем на GitHub

В репозиторий включен слайд PowerPoint, который дает дополнительные объяснения того, как он работает. Я считаю, что это довольно мощный инструмент.

0 голосов
/ 18 февраля 2011

См. Это в руководстве: http://book.cakephp.org/view/1001/Understanding-Models

Вы путаете ОО и реляционное моделирование данных.

Какой подход вы бы предложили для базы данных, спроектированной таким образом?

Подход, описанный в руководстве, связан с выше.

...