前提・実現したいこと
laravelを使い詳細画面の作成をしています。
ユーザー名をクリックして、クリックしたユーザーのpostsテーブルの中身を取得したいのですが、うまくデータが受け渡されません。
該当ソースコード
index.blade.php (一覧表示)
php
1@foreach ($posts as $post) 2 <a href="{{ route('show', $post->id) }}" >{{ $post->username }}</a> 3@endforeach
show.blade.php (詳細画面)
php
1{{ $post->id }} 2{{ $post->post }} 3{{ $post->created_at }}
PostsController.php
php
1public function show($id) 2 { 3 $post = Post::find($id); 4 return view('users.show', compact('post')); 5 }
web.php
php
1Route::get('/show/{id}', 'PostsController@show')->name('show');
postsテーブル
php
1+------------+------------------+------+-----+---------+----------------+ 2| Field | Type | Null | Key | Default | Extra | 3+------------+------------------+------+-----+---------+----------------+ 4| id | int(10) unsigned | NO | PRI | NULL | auto_increment | 5| user_id | int(10) unsigned | NO | MUL | NULL | | 6| post | varchar(500) | NO | | NULL | | 7| created_at | timestamp | YES | | NULL | | 8| updated_at | timestamp | YES | | NULL | | 9+------------+------------------+------+-----+---------+----------------+
補足
こちらの一覧表示画面ではユーザーのpostsテーブルの中身を取得できました。
フォローしているユーザーのみを表示の画面でpostsテーブルの中身を取得する時に値がnullになって返ってきます。
dd(); デバックで確かめたところ、postsテーブルのidではなくfollowsテーブルのidを取得していることが原因なのですが、下記リレーションの記述でpostsテーブルのidを取得する記述が分からずにいます。
該当ソースコード
index.blade.php (一覧表示)
php
1@foreach ($posts as $post) 2 <a href="{{ route('show', $post->id) }}" >{{ $post->username }}</a> 3@endforeach
FollowList.php
php
1@foreach ($posts as $post) 2 <a href="{{ route('profile', $post->id) }}" >{{ $post->username }}</a> 3@endforeach
FollowsController.php (フォローしているユーザーの一覧表示)
php
1public function followList() 2{ 3 $user = auth()->user(); 4 $posts = \DB::table('users') 5 ->join('posts', 'posts.user_id', '=', 'users.id') 6 ->join('follows', 'follows.followed_id', '=', 'posts.user_id') 7 ->where('follows.following_id', '=', $user->id) 8 ->get(); 9 return view('follows.followList',['posts' => $posts]); 10}
PostsController.php(クリックしたユーザーのデータを取得)
php
1public function profile($id) 2{ 3 $post = post::find($id); 4 return view('users.profile', ['post' => $post]); 5}
web.php
php
1Route::get('/profile/{id}', 'PostsController@profile')->name('profile');
followsテーブル
+--------------+------------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------------+------+-----+-------------------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | following_id | int(10) unsigned | NO | MUL | NULL | | | followed_id | int(10) unsigned | NO | MUL | NULL | | | created_at | timestamp | NO | | CURRENT_TIMESTAMP | | +--------------+------------------+------+-----+-------------------+----------------+
postsテーブル
+------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | user_id | int(10) unsigned | NO | MUL | NULL | | | post | varchar(500) | NO | | NULL | | | created_at | timestamp | YES | | NULL | | | updated_at | timestamp | YES | | NULL | | +------------+------------------+------+-----+---------+----------------+
usersテーブル
+------------+------------------+------+-----+----------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+------------------+------+-----+----------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | username | varchar(255) | NO | | NULL | | | mail | varchar(255) | NO | | NULL | | | password | varchar(255) | NO | | NULL | | | bio | varchar(400) | YES | | NULL | | | images | varchar(255) | YES | | dawn.png | | | created_at | timestamp | YES | | NULL | | | updated_at | timestamp | YES | | NULL | | +------------+------------------+------+-----+----------+----------------+
バージョン
laravel 5.5.48
php 7.4.5
homestead
長い質問になり申し訳ございません。ご教授の程、宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー