プログラマー初心者です。
Laravelを触って頑張っています。
Laravelでアプリを作りながら学んだことを雑多に記していきます。
記事の正確性は低めです。なので、各項目ごとの参考を参照したほうが良いと思います。
それでは!
.envのAPP_URLの設定
ローカルで複数のプロジェクトを作る際にAPP_URLの設定をしておく。
php artisan serve
で立ち上がる、簡易サーバでアクセスされるのが、このURLを設定しておくとよさそう。
APP_URL=http://localhost/{プロジェクト名(任意)}
にしておくとよさそう。
バリデーション
参考:ドキュメント「バリデーション」
Laravelではバリデーションの方法がいくつかあるようだ。
- validate()メソッドを使う
- FormRequestを使う←おすすめとのこと。
FormRequestを使う方法は、学習済み。
-
$ php artisan make:request DiaryRequest
でフォームリクエスト作成 - ↑で作ったファイルを編集。
- authorizeメソッド内をtrueに
- rulesメソッド内にバリデーション定義を記していく。
- attributesメソッドを作って、バリデーションエラーのときに表示する名称を個別に設定する。
- messagesメソッドにして、そのままエラーメッセージを表示することもできる。
validateメソッドの方法でも試してみよう。
やりかたは、コントローラの中で、$requestを受けるときに、
$validated_date = $request->validate([バリデーションルールを記述]);
でオッケー。簡単。
でも、FormRequestを使おう。なぜなら、コントローラーをすっきりさせて、見通しを良くしたいから。
また、より複雑なロジックを組める。
$fillableか$guardedか
参考:Qiita「僕がLaravelのEloquentに$fillableでなく$guardedを指定する理由」
$fillableで指定したもののみ代入可能(ホワイトリスト化)。
$guardedは指定したものが代入不可能(ブラックリスト化)。
記事の内容が僕にはまだ理解しづらかったので、とりあえず今はfillableをつかう。
中間テーブル
- 多対多のテーブル同士のリレーションだと、お互い関係させようとすると、カラムが無駄に多くなったり、空白になってしまう。
- 例:articlesテーブルとtagsテーブルがあるときに、例えば、articlesタグにtagカラムをつけようとすると、1つの記事にタグをつけたいけど、いくつつくかわからないし、tagカラムがいっぱい作っておかないといけないし、空白フィールドもできて管理しづらくなる。
そこで間に1つテーブル入れることで、空白のカラムをつくることなく、管理しやすくなる。詳しくは上の参考を見るのが一番いい。 - なお、laravelで中間テーブルのマイグレーションを作るときは、単数形で!
マイグレーションでのつまづき
複数形
テーブル、マイグレーション作成時に複数形にするとLaravelではきちんと関係性を読み込んでくれるのだが、複数形にするときに困ったのが、'diary'の複数形。
'diarys' or 'diaries' どっちだ。
答えはdiaries
'diarys'で最初作ったら、マイグレートのときにエラーが出て先に進めなかった。やり直して、diariesでいったら、通った。単数形にsをつけるだけじゃないんだね。英語の初歩って感じだけど、複数形の法則ってちゃんとデータベースに仕組みが入っているのね。
マイグレーションファイルの作成順番
外部キー制約させたい元のテーブルのマイグレーションファイルは先に作っておかないと、エラーがでるので、マイグレーションの順番にもちょっと注意が必要。
よく考えてみれば、日付が新しい順から実行してマイグレーションupするんだから、「外部キーがないよ」ってなるのは当たり前か。
一気にマイグレーションファイルを作ってからマイグレートでいいけど、ファイルの作成順番が大事ということで。