1.はじめに
今回はbakeコマンドを実践し、containの動きとアソシエーションを見ていきます。
教材はチャンスラボ株式会社の公式YouTubeチャンネル。
https://www.youtube.com/@asterisk_cl_lab/videos
第10回~第11回の動画を参考にします。
【第10回 bakeしてみよう!】
https://www.youtube.com/watch?v=tiwEj62K490
【第11回 containで関連データの取得とテーブルアソシエーション】
https://www.youtube.com/watch?v=Nkw687pZUWQ
2.目次
1.はじめに
2.目次
3.bakeしてみよう!
4.containで関連データの取得とテーブルアソシエーション
5.おわりに
3.【第10回 bakeしてみよう!】
CakePHPのbakeコマンドについて解説しています。
0:46~1:32
bakeコマンドを使えばCRUD機能を簡単に生成できるため、マスタメンテナンスのようなシンプルな機能であればプログラムを記述する必要がないとの説明。動画第5回~第9回で触れてきた機能を自動で生成すると考えると、たしかに便利な機能ですね。
脱線しますがマスタメンテナンスという言葉がピンと来なかったので調べました。
マスターデータとは、データの中でも基礎となるもので、商品情報や従業員情報など1つひとつの基礎的な情報を記録します。 たとえば、商品マスターであれば、商品名、型番、仕様など個々の商品の情報を扱います。
一方でトランザクションデータとは、システム上で発生した取引などの出来事を記録したデータのことで、 一般に履歴と呼ばれるものを指します。たとえば、商品の購買履歴や、従業員への給与支払い履歴などです。
参考:自走プログラマー【抜粋版】 https://jisou-programmer.beproud.jp/%E3%83%87%E3%83%BC%E3%82%BF%E8%A8%AD%E8%A8%88/46-%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%87%E3%83%BC%E3%82%BF%E3%81%A8%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%88%86%E3%81%91%E3%82%88%E3%81%86.html
マスターデータを編集したり追加することがマスタメンテナンスということでしょう。
第10回の動画内で言えば、「鮫島マルコ」さんのnameやaccountはマスターデータで、ログイン時刻などはトランザクションデータに該当するのでしょうか。
6:17~6:25
手順に従ってもUsers画面に「List Login Historys」と「New Login Histry」のリンクが生成されなかったため、再度
UsersTableをbakeしました。3:40~5:24の手順を振り返ってみてください。
6:31~7:15
各テーブルの関連とテーブル名について触れています。
テーブル名(単数形)+IDをカラムに持つ場合、テーブルに関連があると判断されます。LoginHistorysTableはuser_idというカラムに持つため、UsersTableとの関連があると判断されたということになります。
CakePHP のモデルに対応するテーブル名は、複数形でアンダースコア記法です。上記の例で言えば、 テーブル名はそれぞれ、 users 、 article_categories 、 user_favorite_pages になります。
二個以上の単語で構成されるフィールド/カラムの名前は、 first_name のようにアンダースコア記法になります。
hasMany, blongsTo, hasOne 中の外部キーは、デフォルトで関連するモデルの(単数形の)名前に _id を付けたものとして認識されます。ユーザーが記事を複数持っている (Users hasMany Articles) としたら、 articles テーブルは、 user_id を外部キーとして users テーブルのデータを 参照します。 article_categories のような複数の単語のテーブルでは、外部キーは article_category_id のようになるでしょう。
参照:cookbook https://book.cakephp.org/3/ja/intro/conventions.html#model-and-database-conventions
9:10~9:30
bakeし直すとこれまでに行った変更が消えてしまう点に注意するよう説明しています。
たしかに第9回動画でUsersController.phpのindexメソッドのpaginateにlimitのオプションを加えましたが、今回の動画でbakeし直したので元に戻っています。
4.【第11回 containで関連データの取得とテーブルアソシエーション】
bakeコマンドで生成されたソースコードを解説しています。
1:58~2:21
テーブルやクラスの命名について触れています。
cookbookから一部抜粋すると下記のようになります。
コントローラーのクラス名・・・複数形のパスカルケースで、最後にControllerが付く。
例)UsersController、ArticleCategoriesController
モデルに対応するテーブル名・・・複数形のアンダースコア記法。
例) article_categories、user_favorite_pages
二個以上の単語で構成されるフィールド/カラムの名前・・・アンダースコア記法。
例)first_name
Tableクラス名・・・複数形のパスカルケースで、最後にTableが付く。
例)ArticleCategoriesTable、UserFavoritePagesTable
参照:cookbook https://book.cakephp.org/3/ja/intro/conventions.html#model-and-database-conventions
2:21~6:02
CakePHP特有のメソッドであるcontainについて解説しています。
かなり重要そうなメソッドですが、今は便利な機能がある程度にとどめ、深掘りは今後の課題としたいです。
3:37~3:58
debugkitについて触れています。
ツールバーの詳しい内容はcookbookに記載されています。動画内でクリックした「Variables」の機能はコントローラーでセットされたビュー変数の表示です。つまり動画の説明通り、ControllerからTemplateへデータを渡すためにset関数に入れた変数であるuserのデータを見ることができます。
参照:cookbook https://book.cakephp.org/debugkit/3/ja/index.html#id4
6:05~7:44
CakePHPのアソシエーションについて解説しています。
[UsersTable.php]
[LoginHistorysTable]
アソシエーションはinitialize() の中で定義されます。
UsersTableがLoginHistorysTableに対してhasManyと定義している一方で、LoginHistorysTableはUsersTableに対してbelongsToを定義しており、補完の関係になっています。
参照:cookbook https://book.cakephp.org/3/ja/orm/associations.html#hasone
5.おわりに
第10回、第11回の動画の内容はCakePHP3のかなり重要な部分であると感じました。
難しい内容でしたが、理解して使えるようにしたいですね。
最後までご覧いただきありがとうございました。