https://teratail.com/questions/50857?link=qa_related_pc
この記事を参考にして、中間テーブルのリレーションを取得したのですがさらにここからリレーション先のリレーションを取得するにはどうしたらいいのでしょう。
productsテーブルにcategory_idというカラムがありcategoriesテーブルとリレーションしているとします。参考記事の方法でproductsテーブルの情報を取得し、さらにそこからそのproductsテーブルのcategory_idに紐付いたcategoriesテーブルの情報を取得するにはどのようにすればいいのでしょうか。
■テーブル設計
【usersテーブル】
id | name | password | created_at | updated_at |
【productsテーブル】
id | title | price | category_id |user_id | created_at | updated_at |
【favoritesテーブル】
user_id | product_id | created_at | updated_at |
【categoriesテーブル】
id | name | created_at | updated_at |
User.php
public function products() { return $this->hasMany('App\Producdt'); } public function favorites() { return $this->belongsToMany('App\Products', 'favorites'); }
Product.php
public function category() { return $this->belongsTo('App\Category'); } public function favorites() { return $this->belongsToMany('App\Favorite', 'favorites'); } public function user() { return $this->belongsTo('App\User'); }
Category.php
public function products() { return $this->hasMany('App\Product'); }
Favorite.php
class Favorite extends Model { // }
web.php
Route::get('/my/favorite', 'ProductsController@myFavorite')->name('my.favorite');
ProductsController.php
public function myFavorite() { $user = Auth::user(); $favorites = $user->favorites; return view('products.favoriteProducts', [ 'favorites' => $favorites, ]); }
favoriteProducts.blade.php
<div id="app"> <favorite-products :favorites="{{$favorites}}"></favorite-products> </div>
FavoriteProducts.vue
<div v-for="product in favorites"> {{ product.category_id }} // ここにproductsテーブルのcategory_idとリレーションしたcategoriesテーブルのnameカラムの値を表示したい </div> <script> export default { props: { favorites: Array, }, mounted() { console.log('Component mounted.') } } </script>