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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

CakePHP

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

Q&A

解決済

2回答

1507閲覧

cakephp3でブログのカテゴリテーブルの実装についての設計質問

yajin

総合スコア75

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

CakePHP

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

0グッド

0クリップ

投稿2016/10/29 01:27

編集2016/10/29 04:14

現在ブログのような投稿システムで、投稿する内容に0~10までのカテゴリを各ユーザが作れるようにしたいと考えています。
articlecategoryのようなものを作りたいのですが、カラム番号と一致できるようにカラムとして、
category1~10的なカラムを作りたいと考えています。テーブルに例えると、カテゴリ名を横に設計していきたいです。0はデータベースでdefault 0を設定したいとします。

①新規フィールドいつ作るのが理想か。
ユーザ情報登録時なのか、ユーザが作りたいと思ったときに作るのか。(通常ブログ記事のデフォルトでは0になっています)
できれば新規ユーザ時に登録して、ユーザがカテゴリ登録もできるのかというような認知できる設計にしたいと考えていますが、新規ユーザのユーザIDとカテゴリテーブルのIDがいつも一致できるのか心配です。userテーブルのid番号を新規登録した際にカテゴリテーブルに同じuser_idとしてフィールドを作りたい場合、どのようにすればよいのか。

PHP

1$result = mysql_query($query); 2$last_id = mysql_insert_id();

的なものをcakephp3ならどうするか。

②カテゴリ内の記事を全削除するためにはどうしたらよいのか。
外部キー制約でカテゴリ内の記事を全削除なんてことはできるのか?
行の削除は外部キー制約でできるが、delete from articles where user_id = 100 and category = 5;
的なクエリを投げて全削除するべきなのかという疑問です。

③カテゴリテーブルのカラム名について
1,2,3,4というように数字はできるのか。mysqlではできるが、オブジェクト指向として取り出すときにフィールドに数字番号は可能なのでしょうか。$category->1
的な感じです。

回答によって、色々考えることが派生していくことが考えられるので、ちょっとわかりにくい質問ですがどのようにすればよいか教えてください。

追記:色々と考えていたらカラムを10個設定しなくてもよさそうな気がしてきました。
懸念していた事はユーザがカテゴリの順序を任意で変えていきたいというものでした。
id,user_id ,category_id ,category_name, created, modified
的な感じにして、modifiedでソートをかけていけば順序が保てそうです。

どうなのでしょうか。

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

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

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

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

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

guest

回答2

0

ベストアンサー

わかる範囲で回答します。

userテーブルのid番号を新規登録した際にカテゴリテーブルに同じuser_idとしてフィールドを作りたい場合、どのようにすればよいのか。

entityをsaveするとidが自動的に設定されます。(マニュアル参照)

外部キー制約でカテゴリ内の記事を全削除なんてことはできるのか?

DBの外部キー性制約(ON DELETE CASCADE)でもできますし、Cakeの機能を使ってもできます。

1,2,3,4というように数字はできるのか。mysqlではできるが、オブジェクト指向として取り出すときにフィールドに数字番号は可能なのでしょうか。$category->1

的な感じです。

やったことはないですが、おそらくできないでしょう。ただし、$category->get('1')で取得できるかもしれません。ただし、その他にも制限が発生する可能性もありますし、そもそもカラム名が1というのはわかりやすくもないので、使うべきではないと思います。せめてname1やname2とするとか。基本的には追記にかかれているような方法が適切だと思います。

投稿2016/10/29 07:53

popobot

総合スコア6586

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

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

yajin

2016/10/29 08:46

ありがとうございます。 ずっと考えていると、id,user_id ,category_id ,category_name, created, modified というような設計になりつつありますが、ユーザがそのカテゴリの順序を設定したい場合、何かいい方法はありますでしょうか。UI的にもわかりやすい方がいいのかなと思っています。
popobot

2016/10/29 09:13 編集

自分がよくやるのはsortという名前のカラムを用意して、そこに数字を入れる方法です。 ユーザが数字を入れるのはわかりにくいので、編集画面ではsortableなどを使って、順番を指定してもらう感じですかね。 https://jqueryui.com/sortable/
yajin

2016/10/29 09:34

なるほど。 ただ、スマートフォンでは変更できないのですよね? 何かしらよい方法があるといいのですが・・・。
popobot

2016/10/29 10:13

自分はやったことないですが、できるっぽい記事はありますね http://raqool.com/blog/archives/334 まぁ、単純に「上」「下」ボタンで上下に移動するUIとかでもいいかもしれませんが。
yajin

2016/10/29 10:45

>まぁ、単純に「上」「下」ボタンで上下に移動するUIとかでもいいかもしれませんが。 なるほど。参考になりました。考えます。
guest

0

MySQL なら 削除しかり、NULL設定しかりが CREATE TABLE 時に制御可能

13.1.17.2 外部キー制約の使用

親テーブルを削除すると関連する子テーブルが自動削除を選択することも可能です。

投稿2016/10/29 01:47

編集2016/10/29 01:48
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yajin

2016/10/29 02:01

フィールドにおける制約なら外部キー制約の使用ができることはわかるのですが、カラムのデータ削除の場合はdelete コマンドを使ってのほうがよさそうでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問