CRUDとは
CRUDとは
CRUDは Create(作成) Read(参照) Update(更新) Delete(削除)の頭文字をとって命名されたデータベース操作の種類のことで
データベース操作の基本です。
テーブルを作成してみる
create table users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, age INTEGER, created_at DATETIME, updated_at DATETIME);`
create tableの基本文法は
create table [ユーザ名] ( [カラム名1] [型1] [オプション1],[カラム名2] [型2] [オプション2] ...)
Create /INSERTでレコードを作成する
テーブルが作成できたので実際にレコードを作成します。作成するにはInsert文で作成します。
INSERT INTO users (name, email, age, created_at, updated_at) VALUES('John', 'john@example.com', 20, NOW(), NOW())
このような形式で挿入するテーブル、カラムとその値を指定してレコードを挿入します。 複数カラムを入れたい場合
INSERT INTO users (name, email, age, created_at, updated_at) VALUES('Mary', 'mary@example.com', 20, NOW(), NOW()), ('Sam', 'sam@example.com', 22, NOW(), NOW()), ('Brian', 'brian@example.com', 30, NOW(), NOW()),
また、次のようにnameを指定しない形でのINSERT文もSQLの構文としては正しいですが、
前の段階でnameカラム自体にNOT NULL(空でない)制約をかけているのでnameを省略するとエラーになります。
> INSERT INTO users ( email, age, created_at, updated_at) -> VALUES('alice@example.com', 20, NOW(), NOW()); ERROR 1364 (HY000): Field 'name' doesn't have a default value
ここでは、NOTNULL制約をかけているのでデフォルトの値がないと言われています。
Read/SELECTでレコードを参照する
前で作成したので確認してみる
SELECT*FROM users;
ここで条件を絞り込むにはwhere句を使用します。
例
SELECT*FROM users where name = 'masato';
名前にmが含まれている場合
SELECT*FROM users where name like '%m%';
名前にmが含まれるかつ20際以上の人
SELECT*FROM users where name like '%m%' and age>=20;
名前に"m"が含まれるか"s"が含まれる人
SELECT*FROM users wehere name like '%m%' or name like '%s%';
など様々な形で条件式を書くことができます。AND条件OR条件を設定することができます。
Update/UPDATEでレコードを更新
次は更新処理です。masatoの名前をxxxという形式で更新しています。
UPDATE users SET name ='xxxx' where name ='masato';
更新日も設定すると
UPDATE users SET name = 'XXXX', updated_at = NOW() where name = 'masato';
このように複数のカラムを更新することができます。 UPDATEはSQLで迂闊にWHERE句を忘れるとテーブル全て更新されてしまいます。
Delete/DELETEでのレコード削除
最後のDELETEはいたってシンプルです
DELETE FROM users;
これだとテーブルの全レコードを削除してしまうのでUPDATEと同様に条件を絞って削除します。
DELETE *FROM users where age>=20;
まとめ
CRUD操作のおさらいをしました。フレームワークありきだと直接SQLを操作しないため書く機会が減ってしまいますが、
このように整理してみると基本が振り返れていいですね。
CakePHPのMVCとは何か?
CakePHPに限らず多くのフレームワークはMVCモデルを採用しています。
ただなぜMVCを採用しているのでしょうか?
MVCの利点と問題点,CakePHPのMVCの特徴と整理しておきます。
そもそもMVCとは?
アプリケーションアーキテクチャの一つで
Model/View/COntrollerの3つのプログラム構造のことを言います。
それぞれの役割
M:Model
システムの中でビジネスロジックの実行 DBへアクセスするためのもの
アプリケーションが扱うデーターの操作
業務屋
V:View
ユーザーからの画面入力
ユーザーへの結果を出力
Modelのデータの状態を参照して画面に表示
C:Controller
入力情報を受け取る
処理を行うModelと結果を返すViewを選定
司令塔の役割
利点
1.機能が分割されているため、分業して作業がしやすい。
2.それぞれが独立しているので変更・修正があった場合影響が受けにくい
問題点
1.業務で扱うデータ要件が複雑になればなるほど、Modelが肥大化する
2.入力に応じた出力要件が複雑になればなるほど、ControllerとViewの依存が高まる
CakePHPMVCの特徴
CakePHPのMVCの特徴としてModelには EntityとTableがあります。
Entity
Table内のソースを動かすために必要なもの。投げれば計算とか、Selectしてきた結果のフラグを日本語に変えたりしてくれます。
個々のレコード行レコードレベルの振る舞いや機能設定の定義 レコードの部分にあたるところ
Table
CRUD処理はもちろん、入力チェックもここで実装できます。
CakePHPは(デフォルトでやろうとすると)1テーブル1ヴァリデーターになります。 もちろん、デフォルトでやろうとしないでヴァリデーターかけることはできます。
Tableを動かすためにはEntityが必要です。 TableのinitializeでどのEntityを使用するか定義します。 initializeではEntity以外に、使用するDB名とテーブル名の定義、主キーの定義をします。
Element
こちらはHTMLファイルをパーツごとに書き出すことがきます。
ここで書き出したパーツはTemplateから呼び出して同じパーツで使いまわすことができます。
Layout
全画面共通で表示させたいことをdefualt.ctpに表示させる 個別で適用させることも可能
CakePHPの規約について
なぜ規約があるのか?
CakePHPの公式にも書いてある通り「設定より規約」の仕様になっているからです。
これはもともとRuby on Railsの手法をCakePHPが取り入れたからです。Ruby on Railsも「設定より規約」を元にしています。
規約をすることで開発を統一することができるので、自分以外の開発者がいてもするにプロジェクトに参加できます。
また、自己流で書いたコードは非常に読みずらく、コードの保守性に問題が出るからです。
フレームワークは使い始めは覚えることが多いですが、一度覚えれば簡単にそして圧倒的に時間を短縮させることができます。
キャメルケース記法
こちらは2パターンあります。
1.パスカルケース
AritcleController.phpなど
単語の先頭大文字で表記する
2.キャメルケース
articlePage.phpなど
最初の単語だけは小文字それ以降は大文字表記
アンダーコア記法
スネークケース、単語の間にアンダースコアを入れる
article_page
CakePHPの命名規約は?
View
コントローラーの関数名をアンダースコア記法にしたものが表示させる
ex.ArticleController article.ctpを表示
ex.editName()関数、edit_name.ctpなど表示する
コントローラー
複数形+パスカルケース+Controllerとなります。
ex.PlayMessageController
ex.UsersController
モデル (table entity)規約
Tableクラスは命名は複数形+パスカルケース+tableになります。
ex.PlayMessageTable
ex.UsersTable
ただし、Entityクラスは単数形になるので注意が必要です。
Userなど
データベースの規約
CakePHPはデータベーステーブルとModelが関連ずけられているのですが、テーブル名は複数形+アンダースコアになります。
ex.playing_message
フィールドやカラム名についてもアンダースコア表記になります。