小倉ライブの前から CakePHPのあるプログラムを書いていて頭を悩ましていました。ここに二つのテーブルがあります SQLで書けば
CREATE TABLE `clinics` { `id` INT( 11 ) NOT NULL AUTO_INCREMENT, `clinic_name` VARCHAR( 255 ) NOT NULL DEFAULT '', CONSTRAINT PRIMARY KEY (`id`) } CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE TABLE `physicians` { `id` INT( 11 ) NOT NULL AUTO_INCREMENT, `physician_name` VARCHAR( 255 ) NOT NULL DEFAULT '', `clinic_id` INT( 11 ) NOT NULL DEFAULT '0', CONSTRAINT FOREIGN KEY (`clinic_id`) REFERENCES `clinics` (`id`), CONSTRAINT PRIMARY KEY (`id`) } CHARACTER SET utf8 COLLATE utf8_general_ci;
このような二つのテーブルがありもちろん`clinic_id`.`id`は`clinic`テーブルの`id`を参照しており、`clinics`テーブルと`physicians`テーブルは 1:n の関係でリンクしているのです。
このような良くあるデータ構造の時に、修正画面を作るとすれば、僕であれば次のような画面を作成します
診療所情報の修正画面 診療所名前 : ここに登録されている診療所名前が出る 診療所医師名 1: 名無しの権兵衛 [登録医師削除] 2: 明日晴れのすけ [登録医師削除] [修正][キャンセル]
このようにすれば、診療所名前修正もできますし、登録されている医師名の削除もできます。
CakePHPを用いてこのような画面出力の作成は一日もかからずにできました。しかし、問題は医師名削除だったのです。これが一筋縄では行かなかったのです。何とか動作するプログラムを書くことはできましたが、どうもすっきりしないのです。これが本当に CakePHPのお作法として正しいのでしょうか? はなはだ自信がありません。
何れにしてもこの過程で明らかになったことがあります。CakePHPはその根本に MVC (Model-View-Controller)という良く使われるアーキテクチャを用いているのですが、僕の問題はその MVCを本質的に理解していないのでは? ということなのです。
こんな時に、誰か身近に意見を聴ける方がいて下されば良いのですが・・・・ 実際インターネット質問欄に投稿しようとしても、コードが長くなり失礼と思えるので、なかなかできないのです。どうしましょうかね・・・