###前提・実現したいこと
現在、「ユーザーがお気に入りの画像を登録」→「自分のマイページでお気に入り記事一覧を表示」
するという実装をしたいのですが、以下のようなエラーが発生しております。中間テーブルを使ったデータの取得方法をご教授いただきたいです。
ErrorException in UserController.php line 22: Undefined property: Illuminate\Database\Eloquent\Collection::$images
■テーブル設計
【userテーブル】
id | name | password | created_at | updated_at |
【Imageテーブル】
id | image | user_id | created_at | updated_at |
【favoriteテーブル】
user_id | image_id | created_at | updated_at |
■UserController
userのidをもとにfavoriteテーブルを介し、imageテーブルのデータを取得しようと、以下のコードを書いています。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Image; use App\User; use App\Auth; class UserController extends Controller { public function index(){ $user = \Auth::user(); $viewDate["favoriteImages"] = $user->favorites->images; return view("Frontend.user.index", $viewDate); } }
■index.blade.php(Frontend.user.index)ファイル
お気に入り記事を表示するマイページ
@foreach($favoriteImages as $image) <li> <img src="{{ $image->image }}"> <form action="/favorite/add/{{ $image->id }}" method="post"> <input type="hidden" value="{{ $image->id }}"> {{ csrf_field() }} <button type="submit">お気に入り</button> </form> </li> @endforeach
■User.php
Userモデル
public function favorites(){ return $this->hasMany('App\Favorite'); } public function images(){ return $this->hasMany('App\Image'); }
■Image.php
Imageモデル
public function favorites(){ return $this->hasMany('App\Favorite'); // return $this->belongsToMany('App\Favorite', "favorites"); } public function users(){ return $this->belongsTo('App\User'); }
■Favorite.php
Favoriteモデル
public function user(){ return $this->belongsTo('App\User'); } public function images(){ return $this->belongsTo('App\Image', "favorites"); }
###試したこと
①UserControllerにてdd($hoge->toArray());を使うと
class UserController extends Controller { public function index(){ $user = \Auth::user(); if (\Auth::check()){ $user = \Auth::user(); }else{ // throw new ErrorException("お気に入り機能を利用するには会員登録が必要です"); } $viewDate["postImages"] = $user->images; $viewDate["favoriteImages"] = $user->favorites; dd($viewDate["favoriteImages"]->toArray()); // $viewDate["favoriteImages"] = $user->favorites()->images(); return view("Frontend.user.index", $viewDate); } }
②以下のようなFavoriteのデータの取得はできたのですが、これらのuserのidに付随したimageのデータを取得したいと思っております。
array:6 [▼ 0 => array:4 [▼ "user_id" => 2 "image_id" => 2 "created_at" => "2016-10-09 07:38:55" "updated_at" => "2016-10-09 07:38:55" ] 1 => array:4 [▼ "user_id" => 2 "image_id" => 1 "created_at" => "2016-10-09 07:39:06" "updated_at" => "2016-10-09 07:39:06" ] 2 => array:4 [▶] 3 => array:4 [▶] 4 => array:4 [▶] 5 => array:4 [▶] ]
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/10 09:24