Laravelでサークルを募集するコミュニティサイトを作っています。
Postモデル(サークル)があり、「参加」ボタンを押すとPostとUserにひもづくJoinモデルが作成されるようにしています。
「参加」ボタンは参加済でないユーザーに対してのみ表示したく、
参加済かどうかを確認するための方法を考えています。
Postに紐付くJoinを取り出し、そこからuser_idのみの配列を作り、
Auth::userを使って現在ログインしているユーザーIDが配列に含まれているかを確認したいです。
しかし、user_idのみの配列が作れずに困っています。
どなたか解決策をご教示いただけないでしょうか。
views/posts/show.blade.php <省略> <div class="box"> <span class="box-title">参加者:{{ $join_count }}名</span> @if($joined) <a class="btn btn-warning btn-sm">参加をやめる</a> @else <div class="col-4"> <form method="get" action="{{ route('join.change', $post) }}"> @csrf <input type="hidden" name="status" value="2"> <button type="submit" class="btn btn-light btn-sm">参加する</button> </form> </div> @endif @foreach ($join as $join) <p>{{ $join->user-> name }}</p> @endforeach <省略>
コントローラーでは、
$join_id = $post->joins()
->select(['user_id'])
->get();
上記のようにしてPostに紐付くjoinsモデルのuser_idを取得するようにし、
$user = Auth::user()->id; $joined = in_array($user,(array)$join_id);
$join_idにユーザーIDが含まれるか確認してみましたが、この方法ではうまくいきませんでした。
postController <省略> public function show(Post $post){ $comment = $post->comments() ->orderBy('created_at', 'desc') ->paginate(4); $todo = $post->todos() ->orderBy('created_at', 'desc') ->get(); $join = $post->joins() ->get(); $join_count = $join->count(); $join_id = $post->joins() ->select(['user_id']) ->get(); $user = Auth::user()->id; $joined = in_array($user,(array)$join_id); return view('posts.show')->with([ 'post'=>$post, 'comment'=>$comment, 'todo'=>$todo, 'join' =>$join, 'join_count' =>$join_count, 'joined'=>$joined, ]); } <省略>
ちなみに、$join_idをforeachで表示してみると。
{"user_id":"2"}
{"user_id":"1"}
上記のような結果となりました。
$join_id = $post->joins()
->select(['user_id'])
->get();
こちらをuser_idのみの配列にできれば解決できると思っております。
お分かりの方いらっしゃいましたらご教示お願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/18 14:12 編集
2020/06/18 13:40 編集
2020/06/18 14:17