CakePHPのEntityについて


Photo by Ben on Unsplash

こんにちは!Webエンジニアをしている南です。

CakePHPを初めて使用している時に、よくEntityってどんな時によく使うのだろう?とか。

Entityにはどんなコードを書くのが良いのかなあ?っと悩んだことはありませんか?

僕は結構思っていました。

そこで、今回はCakePHPのEntityについて紹介していきます。

この記事で紹介しているCakePHPのバージョンは3系です。

CakePHPのEntityとは


Photo by Tim Mossholder on Unsplash

CakePHPで使用しているEntityは公式のドキュメントでは、下記のように紹介されています。

エンティティーは保持するデータにアクセスして 操作するための永続的なプロパティーとメソッドを保有しています。

CakePHP公式ドキュメント:エンティティーより

Entityが使用されるタイミング的には、CakePHPで下記のようなコードを書いた時です。

Entityの使いどころについて


Photo by Matt Ridley on Unsplash

公式ドキュメントを見る限り、色々な使い方ができるようです。

ただ、この記事では普段僕が使っている用途に絞って紹介していきます。

僕は普段下記のような用途で使用しています。

・各テーブルで取得したデータの振る舞いを表現する時
・各データが何を表しているのかをまとめておきたい時

また、個人的にCakePHPのTableクラスが主にDBでのデータの取得方法を記述して、Entityではその取得してきたデータの振る舞いを記述する場所だと思っています。

各テーブルで取得したデータの振る舞いを表現する時

よく使う用途としては、Tableクラスで取得したデータの振る舞いを表現する時に使います。

例えば、下記のような感じです。

上記のコードでは、isPremiumUser()を使ってプレミアム会員かどうかを判断しています。

Entityでは、各テーブルで定義したデータがどんな処理を行うのかを定義したい時にその定義をEntityクラスに記載することで、Usersテーブルではこんな処理をしますよということを表現できます。

上記の場合では、実際にEntityに下記のように処理を書きます。

また、上記のコードは下記のように書くことも可能です。

上記の場合は、下記のように書き方が変化します。

Cakeでは下記の用途も見るので、ぜひ覚えておいてください。

各データが何を表しているのかをまとめておきたい時

もう1つよく使う用途としては、各データが何を表しているのかをまとめておきたい時にこのEntityクラスを使用します。

上の方で記載した下記コードについて、数字の1が何を表しているのか初見だと具体的ではないので、少し混乱すると思います。

上記の場合は、まだシンプルですが、そのうち1の他に2や3とか出てきたら、少し混乱してくると思いませんか?

上記のような数字をプログラミングでは、マジックナンバーと言います。

マジックナンバーとは、ソースコードに直に記載された数字のことで、その数字の意味が書いた本人以外の人から見ると具体的ではないことを意味します。

下記の場合は、メソッドから推測できるので、まだわかりやすいかもしれません。

でも例えば、下記のような場合はどうでしょうか?

まず、1って何だ?と思うと思います。

そんな時、MemberTypeEntityに下記のように記載して、MemberTypeEntityを使うことで、上記よりは具体的にコードを見た人に意図を伝えることができると思います。

MemberTypeEntityで記載した定数を使用して、下記のように変更します。

まだ、最初のやつよりマシだと思いませんか。。。?

僕はEntityには、こうやってデータが何を表しているのかをまとめておきたい時に使用したりします。

まとめ

今回は、僕が普段CakePHPのEntityを使っている時の用途について紹介しました。

この記事がEntityってどういう時に、使うのだろうと思っている人の約に立てれば幸いです。

他の使用方法などについて、気になる方はぜひ下記の公式ドキュメントも覗いてみてください。

https://book.cakephp.org/3/ja/orm/entities.html

この記事を書いた人

南 健太郎

1991年生まれ。都内でエンジニアをしています。
このブログでは、個人開発や日々の技術に関する情報などを発信していきます。