とりあえずなLaravelの使い方
目指すところ
- テーブルを作成する
- テーブルにデータを入れる
- テーブルのデータを呼び出してビューで使う
- ルーティング、コントローラー、モデル、ビューの使い方や関係性をまとめる
Laravelの作成
公式ドキュメント読むのが早い
今回は6.xにした。またComposerを使ってインストールした。
テーブルの作成
作成したLaravelのプロジェクトディレクトリにcdした後、
php artisan make:migration create_{migrationファイル名}_table
で、マイグレーションファイルを作成する。作成されたマイグレーションファイルは
- database/migrations/
下に作成される。(ちなみにデフォルトでいくつかマイグレーションファイルがあった。後で邪魔なので消した)
ファイル構成などを説明し始めると長くなるので、公式ドキュメント読んで。
作成後、
php aritisan migrate
コマンドを実行すると、 database/migrations/ 以下に存在する、マイグレーションファイルが全て実行され、それに応じたテーブルが作成される。
このとき作成されるテーブル名は、
php aritisan make:migration create_hogehoge_table
としたとき、hogehogeというテーブル名となる。ちなみに、create_xxx_tableの_xxx_以外の部分が定数的な働きをして、テーブル作成用のコードをデフォルトで作るので、hogehogeとだけファイル名に記述されると、migrationとしての雛形だけが作成される。(上手く説明できないので実際に試すのが良いと思う)
要は、
php aritisan make:migration create_hogehoge_table
php aritisan migration
でテーブルが作成される。(当然用途に合わせて、database/migrations下にあるファイルの中身を書き直す必要はある。カラム設定については「https://laraweb.net/surrounding/4821/」)
テーブルにデータを入れる前に
ここを理解するには、まずLaravelの処理をざっくり理解したほうが良い。
ルーティング
- URIに対して、どんな処理を行うか書く。
- 大体はコントローラーに行くけど、直接ビューに行くこともできる
- 5.3以降はroutes/web.phpに記述する
コントローラー
php aritisan make:controller HogehogeController
- 上記コマンドで作成(app/Http/Controllers/HogehogeController.php)
- どのビューを呼び出すのかや、DBに対しての処理、単純にphpで書くような処理などがかける。
- DBに対しての処理はDBファサードや、Eloquent、クエリービルダーなどを使う
- ビューに対してDBから抜き出した値を送るような場合は、
$name = '未経験エンジニアの憂鬱'
return view('path/to/page',compact('name'));
- みたいな感じで送れる。
- 受け取ったデータは、ビュー内で{{$name}}のようにして使う。
モデル
php artisan make:model User
- 上記コマンドで、appディレクトリ直下にUser.phpのような形で作成される
- モデルにはDBに対して、どのカラムに対しての処理を許すのかや、DBに対しての処理なんかがかける(ただDBに対しての処理はコントローラーに書くのが普通っぽい、大規模になったとき用?)
- MVCで言われるようなモデルではないらしいけど、よくわかんない
結構重要なこととして、User.phpのような形で作成されたモデルは、対象となるテーブルがusersに自動的になる(先頭大文字が小文字になって、複数形となる)。もし、対象とするテーブル名を変えたい場合は
protected $table = 'hogehoge';
のような記述をする。
また
書き方とかは下記URL見るのが早い。
ビュー
- フロント部分
- resources/views下に書く
テーブルのデータを呼び出してビューで使う
- コントローラーから対応するモデルを経由して、DB内のテーブルを参照する。
$dbdata = Dbread::where('id', 1)->get();
※id1のレコードを取得して、変数dbdataに入れてる。Dbreadはモデル名、use App\Dbreadとして使用
これを、
return view('read', compact('dbdata'));
としてviewsにわたす。
viewにてread.blade.phpのようなファイルを作る。(雛形はwelcome.blade.php当たり見れば何となく分かると思う)そこに以下のように記述して取り出す。
<div>read.blade.php</div>
@foreach($dbdata as $data)
<div>{{$data->id}}</div>
<div>{{$data->name}}</div>
<div>{{$data->email}}</div>
<div>{{$data->password}}</div>
<div>{{$data->created_at}}</div>
<div>{{$data->updated_at}}</div>
@endforeach
今回はクエリビルダを使っており、クエリビルダの返り値はstdClassのインスタンスとしてなため、一度foreach等で処理したほうが使いやすい。Eloquentなら単数であれば、foreachの処理は必要ない。
そんな感じ!あとは、学習しながらのりで必要なこと押さえればいいと思う。ルーティング→コントローラー→モデル→DB→モデル→コントローラー→ビューの流れを理解して、実際に一度自分の意図通りのコードを書けたなら後は何でもできる気がする。
Discussion