Laravel学習中に、get(),find(),where()の使い方で詰まってしまった為、備忘録。
早見表
句 | 簡単に | 備考 |
---|---|---|
get() | 指定したキーの全ての要素を取得 | all()と同じだが、他のメソッドと組み合わせ可能 |
where() | 条件を指定してフィルタをかける | 戻り値がBuilderなので、get()、find()と組み合わせて使う |
find() | 指定したキーの要素だけ取得 |
get()
get()を使うと、指定したテーブルの要素全てを取得することができる。
$users=User::get();
return view('user.index', compact('users'));
$usersにUserクラスの要素を取得して格納。
compact('users')で$usersに格納した値もビューファイルに受け渡すことができる。
where()などと組み合わせると、単に全件取得するだけでなく、
条件に合うデータ全てを取得することも可能。
get()で取得したデータをビューファイルで表示するには、以下のようなコードになる。
@foreach($users as $user)
{{$user->name}}
@endforeach
こうすることで、取得した値を1つずつ表示させることができる。
get()で取得したデータが1つであったとしても、@foreachを使用しないと、
「property [hoge] does not exist on this collection instance」
というエラーが出てくるので注意!
where()
データベースから条件指定して取得することができる。投稿した記事に対するコメントを表示したいときは下記のようなコードになる。
$users = User::where('name', 'John')->get();
return view('user.index', compact('users'));
Userクラスの要素'name'が'John'と同じものを取得して$usersに格納。
compact('users')で$usersに格納した値もビューファイルに受け渡すことができる。
where()は、戻り値がBuilder。そのため、コード例のようにget()などを組み合わせないと、ビューファイルで取得した要素が表示できない。
find()
指定した1個の要素だけを取得したい場合に使用。
指定したidのデータを取得する場合は以下のコードになる。
public function user($id)
{
$user = Conduit::find($id);
:
get()とは違い、@foreachでは表示しない。単にビューファイルで{{ $user->name }} と記述すると表示できる。
まとめ
各句の違いを分かっていないと、エラー発生の原因となる為、注意。
他にも使えるものはたくさんあるので、公式リファレンス参照。