前回、データベースの1対多について悩んだことをメモ書きしておいたが、ただ、そもそもMVCのモデルをどう定義すりゃいいのよ、ということを全く考えていなかった。
Javaのクラス的な考え方で、make:modelで作った時に作られる、appディレクトリ直下に作られるモデル名のPHPファイルで、クラス変数として定義しなきゃなんないんだろうな、と思い込んでいて、それらしい記事を探すけどどこにもない。モデルの要素をどこに定義すればいいのよ、と探していたが、実際は少なくともクラス変数として定義する必要はなかった。
モデルを作った時に、make:modelで作った時に「-m」オプションをつけると、database/migrationsディレクトリにマイグレーション用のファイルができる。どうやらここに定義したテーブル名が、そのままモデルの要素と考えていいような印象を受けた。
ではappディレクトリ直下に置かれるモデル名のPHPファイルは何をするのか、というので、前回はDBのテーブル名の定義などをやってたが、何かDBとPHPの変数の間をコンバートする必要があるときに、それを定義できる「ミューテータ」という機能があることがわかった。たとえupdate_atなどの日付のデータはテキストになってしまいますが、これをPHPのCarbonというDateTimeを扱うクラスのインスタンスに変更してくれる、など。
1 |
protected $dates = ['limit']; |
あとは、マスアサインメントといって、登録できるカラム名を定義しておき、それを配列で渡すことでレコードを操作できるような仕組みがあって、それの定義をここでやるみたいです。
1 |
protected $fillable = ['campus','title','body','limit']; |
ここらへんの知識の大半は、「ララ帳」というすごくわかりやすいホームページが参考になっている。対象バージョンが5.1ではあるのだが、最初から進め方がきちんと押さえられているので、とても理解がし易い。昨年7月から更新が止まっているので残念なんですが、とても助かっている。
でも、私がJavaから先に入っているので、どうしてもモデル名のphpファイルに定義されたモデル名のクラスに、クラス変数を定義しなきゃいけないんじゃないの?と思ってしまうのって、誰もわかってくれないか・・・