Я только начал изучать cakePHP несколько дней назад, и это меня смущает. Если бы я написал проект с нуля, моя система позволила бы сказать, что пользователи и каждый пользователь будут иметь один профиль. Поэтому я бы создал таблицы базы данных следующим образом:Является ли моя база данных и понимание структуры неправильным?
+----+----------+----------+------------+
| id | username | password | profile_id |
+----+----------+----------+------------+
| 1 | ksno | ksno | 1 |
| 2 | cake | bake | 2 |
+----+----------+----------+------------+
+----+-----------+----------+---------------+
| id | firstname | lastname | birthday |
+----+-----------+----------+---------------+
| 1 | Alex | | in few months |
| 2 | cake | PHP | |
+----+-----------+----------+---------------+
И тогда я мог бы создать объект профиля от пользователя. Проблема в том, что мне нужно сначала создать профиль, потому что пользователи таблицы имеют внешний ключ профиля. Хорошо, я бы просто начал транзакцию и совершил после того, как все было успешно создано. Вот как я узнал его ...
Но если я взгляну на cakePHP docs and book:
Если таблица содержит внешний ключ, он принадлежит к другой таблице.
Так что в основном означает ... Пользователь относится к профилю? Но это не так. Я почти закончил свои действия с CRUD на пользователе и его профиле ... Но я чувствую, что делаю что-то неправильно ... После книги ... Мы могли бы сохранить сущность и ее ассоциации из формы следующим образом:
$entity = $users->newEntity($this->request->data(), [
'associated' => [
'Profiles' => ['validate' => false],
]
]);
Но это требует, чтобы изменить схему базы данных, которая привела бы меня неправильно понять, что происходит, потому что я наклоняю первый сохранить пользователь без идентификатора профиля ... Так что я пошел и сделал это:
$userProfilesRepository = TableRegistry::get('UserProfiles');
$userProfile = $userProfilesRepository->newEntity();
$userProfile = $userProfilesRepository->patchEntity($userInfo, $this->request->data);
$user = $this->Users->patchEntity($user, $this->request->data);
if ($userProfilesRepository->save($userInfo) && $this->Users->save($user->set('profile_id', $userInfo->get('id')))) {...
Может кто-нибудь, пожалуйста, помогите указать мне правильный способ мышления о схемах баз данных и ассоциациях каркасов? Я чувствую, что делаю неправильно, но только потому, что я борется с CakePHP.
Ваши таблицы являются разумными. Такие платформы, как CakePHP и другие, которые используют объектно-реляционные карты, заставляют вас использовать модель сетевых данных, наивное и ограниченное мышление, которое возвращается к предреляционным дням. Многие из того, что можно сделать в SQL, не поддерживаются такими структурами. Я предлагаю вам изучить разные модели данных (сеть, сущность-отношения и реляционные отношения), поскольку знание их ограничений и способность переводить между ними должны прояснить многие проблемы, с которыми вы сталкиваетесь. – reaanb
Являются ли такие рамки изменением моего рабочего процесса разработки каким-то образом? Сначала я создал ER-модели, а затем основал их, создал мою базу данных, а затем начал изучать cakePHP и писать свое приложение. Но тогда дело доходит до этого момента, когда я чувствую себя неправым и думающим: с чего начать? Или я должен просто перепроектировать мою базу данных так, чтобы она была совместима с каркасом? – ksno
Я давно решил отказаться от объектно-реляционных карт (и фреймворков, которые зависят от них). Моделирование данных и системное моделирование являются отдельными дисциплинами. Я делаю классы для системных обязанностей и обрабатываю данные в наборах, поэтому у меня нет ограничений на то, как я моделирую свои данные. К сожалению, я не могу помочь вам работать в рамках. – reaanb