Posted on

CakePHPのHasAndBelongsToManyを使う

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

Posted on

CakePHPカンファレンス東京に行ってきました!!

東京日帰りという強行日程でCakePHPカンファレンス東京に行ってきました。
今回の勉強会は前回までと違って昼間に開催してくれたので僕ら遠征組でも参加しやすかったです。
そうとはいえ東京までの移動と始発の電車に乗るため家を出たので会場に着いたときにはかなり疲れていました。
けどカンファレンスが始まると疲れも忘れる感じに聞き入ってしまいました。

まず安藤さんの「国内でのCakePHPの利用状況について」
CakePHPは初心者から玄人まで全てのユーザーに使っていただけるフレームワークだということ、
ネットでもCakePHPの情報がかなり手に入りやすい状況になってきているほど、
ここ最近はすごい普及してきているという事をおっしゃっていました。

次に岸田さんの「Agileな開発現場での実践例」
テストコードをCakePHPで書いておられて、実際にテストではまった所などを詳しく説明してくれて、
とても参考になりました。またテストコードを書いていると開発期間は倍になるということもおっしゃってましたが
それでも後のメンテナンスやバージョンアップの時に楽になるので導入するべきだと言っておられました。

午後からGarrett氏の「招待講演」
CakePHPの始まったきっかけや、これからCakePHPはどうなっていくということをおっしゃられていました。
バージョン2.0をリリース予定で2.0からはphp5での対応になるということでした。ただ予定は未定という感じで・・・
CakePHP開発チームにとってチケットを投げてもらう時にテストケースとパッチをつけてくれと言っていました。

その後、鶴岡さんの「XoopsCubeなのにCakePHPを使う!」
Xoopsの中にCakePHPで書いたプログラムを埋め込む事が簡単に出来るということで実際に埋め込む方法を
実践してくれていました。自作でCMSを作るよりより多くの人に使ってもらうために今もう既に存在していて認知されている物に乗っける方が結果的にいいんだということを言っておられました。

最後にライトニングトークで皆さんの実績やアイデアを聞かせてもらいすごい勉強になりました。
懇親会にも参加して色々な話が出来てとても充実した時間がすごせました。
日帰り東京という過酷なスケジュールでしたがとても満足なカンファレンスでした。