私はちょうど数日前にcakePHPを学び始めました。それは私をたくさん混乱させます。私が最初からプロジェクトを書く場合、私のシステムでは、ユーザーと各ユーザーが1つのプロファイルを持つと言うことができます。だから私はこのようなデータベーステーブルを作成します:データベースとフレームワークの理解に誤りがありますか?
+----+----------+----------+------------+
| 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],
]
]);
しかし、私はプロファイルIDを持つことなく、ユーザを保存最初カントので、それはだから私はこれを行っていた...、何が起こっているかを誤解するように私につながる私のデータベーススキーマを変更する必要があります。
$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