質問: DB::table('item_master')->where('id',$id); return view('layouts.detail.index')->with('query',$query); } ``` layouts.detail.index.blade.php ``` {{$query->id}} {{$query->item_name}} ``` こちらで取得することができません。 おそらく$queryでvar_dumpすると意図しないものがでてくる(無限ループ?)のでおそらくそこなのですが 何が間違っているのかわかりません。 ちなみにitem_masterテーブルには一意のidとitem_nameが入っています。 大変低レベルな質問で申し訳ないのですが ご教授のほどお願いいたします。
回答: その記事の詳細表示の節を見ると、次のようなコードが書かれていますね。 ``` public function show($id) { //レコードを検索 $user = User::find($id); //検索結果をビューに渡す return view('users.show')->with('user',$user); } ``` この `User::find()` を `DB::table(..)->where(..)` に書き換えたようですが、**これらは使い方が異なるため、単純に置き換えることはできません**。 `User` はLaravelのEloquentという機能を使った、usersテーブルへのアクセスを担うクラスで、`find()` は指定したIDのレコードを単一のオブジェクトで返します。 一方あなたが使っているのはQuery Builderという機能です。これは`DB::table(..)` に対して順番に `select()` `join()` `where()` などのメソッドを呼び出すことでクエリを組み立て、`get()` `first()` などのメソッドで結果を取得する、という流れになります。ですから、 ``` $query = DB::table('item_master')->where('id',$id); ``` これではクエリを組み立てただけで、結果を取得していません。 例えばEloquentの `find()` のように一件だけ取得したいのであれば、出来上がったクラスに対して `first()` を呼び出します。この結果にはEloquentと同様にしてアクセスができます。 ``` $item = DB::table('item_master')->where('id', $id)->first(); // この$itemに対して、例えば$item->item_nameとしてアクセスできる ``` 参考 データベース:クエリービルダー 5.1 Laravel ・・・と、Query Builderの話をしてきましたが、Qiita記事のようにEloquentを使うことも可能です。それぞれ自由度や書き方が異なりますから、お好きな方を選んで構いません。 * 初めてのLaravel 5.1 : (9) モデルの作成 – ララ帳 * Eloquent:利用の開始 5.1 Laravel