MVC フレームワークを使用する場合は、その規則に従うことを強くお勧めします。したがって、いくつかの変更はあなたにとって有益かもしれません。
あなたが探しているのは、「users」テーブルと「habilities」テーブルの間の HABTM (Has And Belongs To Many) 関連付けです *。テーブルの設計により、ユーザーは複数の機能を持つことができると推測しています。それ以外の場合は、hasMany 関連付けを確認する必要があります。
次のようになります。
テーブル機能: 機能から * を選択します。
+----+------------+----------------------+----------+
| id | category | subcategoy | created | modified |
+----+------------+------------+---------+----------+
| 1 | Programmer | ASP | | |
| 2 | Programmer | PHP | | |
| 3 | Musician | Classical | | |
+----+------------+------------+---------+----------+
テーブル users: select * from users;
+----+-------+---------------------+---------------------+
| id | name | created | modified | **
+----+-------+---------------------+---------------------+
| 1 | Roy | 2012-08-15 02:52:18 | 2013-01-17 03:25:28 |
| 2 | Ben | 2012-11-10 03:36:12 | 2012-11-10 03:36:12 |
+----+-------+---------------------+---------------------+
HABTM のリレーショナル テーブル: select * from habilities_users;
+----+-------------+-------------------+----------+
| id | hability_id | user_id | created | modified |
+----+-------------+---------+---------+----------+
| 1 | 1 | 2 | | |
| 2 | 2 | 1 | | |
+----+-------------+---------+---------+----------+
habilities_users の参照列を見てください。それらは、CakePHP で動作するように _id サフィックスが付いた単数形です。
モデル クラスを定義することも重要です。これは、すべての関連付けを定義する場所だからです。
アプリ/モデル/User.php
<?php
class User extends AppModel {
public $hasAndBelongsToMany = array('Hability');
}
アプリ/モデル/Hability.php
<?php
class Hability extends AppModel {
public $hasAndBelongsToMany = array('User');
}
テーブル habilities_users にはモデル ファイルは必要ありません。その動作とプロパティは、関連付けられたモデルの宣言に暗黙的に含まれています。
* これらの名前を使用することも CakePHP の方法です。【リンク】
** 各テーブルに「作成」と「変更」を追加すると、各レコードのイベントが自動的に保存されます。