質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

2回答

4011閲覧

cakePHPにおけるidフィールドについて

pecchan

総合スコア555

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2016/03/02 23:52

本をもとに初めてcakePHPでプログラミング中です。
PHP、テーブル設計は経験者です。

cakePHPにおける”id”についてお聞きしたいです

bakeコマンドにてとりあえず動作できる物が出来ました。

以下のようなテーブルをもとに作りました。

テーブル名:test
フィールド:id,name

ところが、bakeで作成された入力画面には、「name」しか入力用のテキストボックスが作られていませんでした。
「id」にも入力したいのですが通常どうするのでしょうか?

そもそも「id」= 主キーであるため編集すること自体がよろしくない。
だから「id」は編集できない設計思想になっている、と予想しました。

ですが例えば、
「01:男性 02:女性 などの定数データをテーブルに登録したい。それも画面から行いたい。」
ような場合はどうするのでしょうか?
※男性のidは、オートナンバーを使わずこちらが決めた値"01"にしておきたいわけです。

このような場合の設計は、cakePHPでは通常どうするのでしょうか?

以上です。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

cakePHPはサロゲートキーの設計思想で、idを主キーとしています。
ご推察のとおり「主キーであるため編集すること自体がよろしくない」です。

cakePHPの規約に則り作成するのでしたらサロゲートキー以外にgender_idフィールドを追加して
フィールド:id,gender_id,name
とすると良いと思います。
gender_idを画面から変更できるようにし、他テーブルに登録する際はidを使用します。

投稿2016/03/03 01:17

icham

総合スコア559

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pecchan

2016/03/03 01:24

やはりサロゲートキーと編集用キーの2種類持たせるしかないんですね。 有難う御座います。
pecchan

2016/03/03 01:25

お二人に「ベストアンサー」をお送りしたかったです。 どちらかにか送れないんですね。 初めての投稿で申し訳ございません。 有難う御座いました。
icham

2016/03/03 02:03

参考にでもなれば幸いです!
guest

0

ベストアンサー

こんにちは。

早速ですが、「id」という名前のカラムに対して編集するというのは
なかなか聞かないので避けた方がいいかなと個人的には思います。
私がよく扱っていたのは、下記のような設計です。

1. 「性別」というカテゴリーのみ、データを画面から追加できるようにしたい(要はマスタ画面を作成する)場合

m_sexes というテーブルをつくる。
中身は以下のように

| id | code | name | ... |
| 1 | 1 | 女 | ... |
| 2 | 2 | 男 | ... |

  1. 「性別」以外のカテゴリーも今後追加し、データもカテゴリごとに画面から追加できるようにしたい場合

m_categories, m_codes というカテゴリ管理とコード管理をするテーブルを作る

m_categoriesの中身は

| id | code_name | ... |
| 1 | 性別 | ... |
| 2 | 年代 | ... |

m_codes の中身は

| id | m_categories_id | code_name | ... |
| 1 | 1 | 男 | ... |
| 2 | 2 | 女 | ... |
| 3 | 1 | 1960年代 | ... |
| 4 | 2 | 1970年代 | ... |
| 5 | 3 | 1980年代 | ... |

このように、idは基本触らず、代わりに代理のカラムを使用していました。

参考までに。。。

投稿2016/03/03 01:11

CyberMergina

総合スコア295

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pecchan

2016/03/03 01:26

ご丁寧な解説有難う御座います。 大変参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問