今回はCRUDのRead(読み取り)
を実装し、今まで投稿された記事を一覧表示できるようにする。
コントローラ追記
Articleコントローラ
に下記の内容を追記する。
public function index()
{
$articles = Article::all();
return view('article.index', ['articles' => $articles]);
}
indexアクション
はこのような流れになる。
-
Articleクラス
のallメソッド
で全てのレコードを取得し、$articles
へ代入する。 -
$articles
を'article.index'ビュー
へ配列形式で渡す。 - ビューの中で
$articles
、つまり取得したレコードを使用できるようになる。
このallメソッド
は、元はCollectionクラス
のメソッドらしい。そして取り出したレコードはCollectionクラスのオブジェクト
として利用できる。
公式ドキュメントより(一部抜粋)
getメソッドであれリレーションによるものであれ、Eloquentが複数のレコードをリターンする場合Illuminate\Database\Eloquent\Collectionオブジェクトが返されます。EloquentコレクションオブジェクトはLaravelのベースコレクションを継承しているので、Eloquentモデルの裏にある配列をスムーズに操作するために継承した多くのメソッドがもちろん使用できます。
Collectionクラス
を使用しているのがEloquent
だから、EloquentのクラスであるArticleクラス
のインスタンスとして扱うことができるのか・・・?その辺りの繋がりが正直よく分からない。
ルーティング設定
ユーザー側からPOSTする情報は無いので、設定するのはGET
に対応したルートのみで良い。
Route::get('/article/index', 'ArticleController@index')->name('article_index');
ビュー作成
resources/views/articleディレクトリ
にindex.blade.php
を作成し、編集する。今回はtableタグを使ってみた。
@foreachディレクティブ
を使用し、コントローラから渡された$articles(全てのレコード)
から1件ずつ$articleインスタンス
を取り出し、各プロパティを表示
している。
@extends('...layouts.layout')
@section('article_index')
投稿一覧<br>
<table>
<tr><th>ユーザーID</th><th>タイトル</th><th>内容</th></tr>
@foreach($articles as $article)
<tr>
<td>{{ $article->user_id }}</td>
<td>{{ $article->title }}</td>
<td>{{ $article->content }}</td>
</tr>
@endforeach
</table>
@endsection
こちらの記述も忘れずに。
@yield('article_index')
今回はあっさりしているが、ここまで。