質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

400閲覧

Laravel5.5 リレーション カラム取得ができない

Ryosukevvvv

総合スコア19

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/12/27 20:04

編集2018/12/28 07:17

以下のように
Recipes.controllerとrecipes.showのレシピ詳細ページを書いているのですが

// getでrecipes/idにアクセスされた場合の「取得表示処理」 public function show($id) { $recipe = Recipe::find($id); $ingredients = Recipe::find($id)->ingredients; $how_to = Recipe::find($id)->how_to; return view('recipes.show',[ 'recipe' => $recipe, 'ingredients' => $ingredients, 'how_to' => $how_to, ]); }
//recipes.showのレシピ詳細ページ <div class="container"> <div class="row"> <div class="col-4"> <h2>{{ $recipe->name }}</h2> </div> <div class="col-7 offset-1"> <h3>{{ $recipe->content }}</h3> </div> </div> </div> <div class="container"> <div class="row"> <div class="col-4"> <img src="https://placehold.jp/200x200.png"></img> </div> <div class="col-8"> <h4>材料(2人分)</h4> <div class="row"> <div class="col-md-8"> <h4>材料・調味料名</h4> @foreach ($ingredients as $ingredient) <div> {{ $ingredient->ingredient }} </div> @endforeach </div> <div class="col-md-4"> <h4>分量</h4> @foreach ($ingredients as $ingredient) <div> {{ $ingredient->quantity }} </div> @endforeach </div> </div> </div> </div> </div> <div class="container"> <h4>作り方</h4> @foreach ($how_tos as $how_to) <div> {{ $how_to->how_to_make }} </div> @endforeach </div>

以下のようなエラーが起きて材料、分量、作り方が取得できません。
イメージ説明
どのように変更すればいいのでしょうか?

1対多のリレーションは済んでいます。

namespace App; use Illuminate\Database\Eloquent\Model; class Recipe extends Model { protected $fillable = ['user_id', 'name', 'content', 'photo_url']; public function user() { return $this->belongsTo(User::class); } public function ingredient() { return $this->hasMany(Ingredient::class); } public function how_to() { return $this->hasMany(HowTo::class); } }
namespace App; use Illuminate\Database\Eloquent\Model; class Ingredient extends Model { protected $fillable = ['recipe_id', 'ingredient', 'quantity']; public function recipe() { return $this->belongsTo(Recipe::class); } }
namespace App; use Illuminate\Database\Eloquent\Model; class HowTo extends Model { protected $fillable = ['recipe_id', 'how_to_make']; public function recipe() { return $this->belongsTo(Recipe::class); } }

回答よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/12/27 23:07

コードは画像ではなくテキストでマークダウンのcode機能で提示いただけますか?
m.ts10806

2018/12/27 23:08

またRecipeモデルのコードも合わせてご提示ください
guest

回答1

0

ベストアンサー

controllerからviewにはingredientと単数形で渡していて、
viewではingredientsと複数形で読み取ろうとしているからではないでしょうか。

投稿2018/12/28 00:02

mihit

総合スコア61

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ryosukevvvv

2018/12/28 07:21

そちら試しましたがダメでした。 foreach文がおかしいのかな。
mihit

2018/12/28 13:54

$ingredients = Recipe::find($id)->ingredients; 定義されているリレーションメソッド名が ingredient() と単数形なので、->ingredient とプロパティ名も単数系にしなければ常にnullになります。あるいは逆にリレーションメソッド名を複数形にします。
Ryosukevvvv

2018/12/28 16:07 編集

public function show($id) { $recipe = Recipe::find($id); $ingredient = Recipe::find($id)->ingredient; $how_to = Recipe::find($id)->how_to; return view('recipes.show',[ 'recipe' => $recipe, 'ingredients' => $ingredient, 'how_tos' => $how_to, ]); } このように変更したら表示されました! 'ingredients' => $ingredient, ここの左側がView側への引数になるってことでしょうか?
mihit

2018/12/29 14:29

viewは関数ではないので、viewの引数とは言わないです。viewに、おっしゃるところの左側の名前で、右側の値を持つ変数が定義されます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問