多対多のデータを扱うのにHasAndBelongsToManyをモデルで指定してあげると
簡単にデータの取り出しや保存が出来ました。
今回は社員が複数の部署に属すという仕様で使いました。
テーブルは次のようにしました。
parts(部署テーブル)、
users(社員テーブル)、
parts_users(部署・社員連携テーブル)
部署・社員連携テーブルは繋げたいテーブルを「_」で連結させてテーブル名とします。
parts_usersのフィールドは「part_id、user_id」となります。
次にPartsUserモデルを作っていないとエラーになるので作っておきます。
- class PartsUser extends AppModel
- {
- var $name = 'PartsUser';
- var $useTable = 'parts_users';
- }
Userモデルで
- class User extends AppModel
- {
- var $name = 'User';
- var $useTable = 'users';
- var $hasAndBelongsToMany = array('Part');
- }
と記述してあげるとUserモデルでセレクトして得られた配列に
所属している部署全てが取得できています。
データの取得はこれですんなりと上手くいったのですがデータの保存が
あまり資料が無くはまりました。
データをセレクトで取得した形式でsaveしてあげても上手く保存が出来ません。
ではどういう配列構造で保存してあげればいいのか、
- $this->data['Part']['Part'][0] = 部署番号
- $this->data['Part']['Part'][1] = 部署番号
- $this->data['Part']['Part'][2] = 部署番号
- ・
- ・
- ・
という感じにデータを持たしてあげるとparts_usersテーブルに社員と部署を
連携したデータを保存してくれます。