多対多のデータを扱うのに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テーブルに社員と部署を
連携したデータを保存してくれます。