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

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

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

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

PHP

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

Q&A

解決済

1回答

607閲覧

同じ投稿を2回する時に投稿ボタンを表示できないようにしたい。

natu494

総合スコア6

Laravel

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

PHP

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

0グッド

0クリップ

投稿2020/08/07 14:27

前提・実現したいこと

laravelで作ったアプリでログインしたユーザがゲームのレビュー投稿をできるのですが、同じゲームのレビュー投稿を2回目から投稿ボタンを表示しないようにしたい。
ここに質問の内容を詳しく書いてください。

発生している問題・エラーメッセージ

発生している問題としては、同じユーザが同じゲームで2回投稿ができてしまうこと。

該当のソースコード

php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6 7use App\User; 8 9use App\Game; 10 11use App\Review; 12 13class ReviewsController extends Controller 14{ 15 public function index(Request $request) 16 { 17 $data = []; 18 if (\Auth::check()) { 19 $user = User::orderBy('id', 'desc')->paginate(10); 20 21 $games = Game::orderBy('id', 'desc')->paginate(10); 22 23 $reviews = Review::orderBy('id', 'desc')->paginate(10); 24 25 26 $data = [ 27 'user' => $user, 28 'games' => $games, 29 'reviews' => $reviews, 30 ]; 31 } 32 return view('users.show', $data); 33 } 34 35 36 public function create($id) 37 { 38 $review = new Review; 39 40 $game = Game::findOrFail($id); 41 42 43 return view('reviews.score', [ 44 'review' => $review, 45 'game' => $game, 46 ]); 47 } 48 49 public function store(Request $request) 50 { 51 //dd($reviews); 52 $request->validate([ 53 'score' => 'required|max:255', 54 'content' => 'required|max:255', 55 ]); 56 $review = new Review; 57 $review->user_id = \Auth::id(); 58 $review->content = $request->content; 59 $review->score = $request->score; 60 $review->game_id = $request->game_id; 61 $review->save(); 62 63 return redirect('myreviews/{user}');; 64 } 65 public function destroy($id) 66 { 67 $review = \App\Review::findOrFail($id); 68 if (\Auth::id() === $review->user_id) { 69 $review->delete(); 70 } 71 return back(); 72 } 73}

PHP

1@extends('layouts.app') 2 3@section('content') 4 5 <h1>レビュー投稿</h1> 6{!! Form::open(['route' => 'reviews.post', 'method' => 'post', ]) !!} 7 {{ csrf_field() }} 8 <div> 9 {{ Form::label('ゲーム名') }} 10 {{ Form::hidden('game_id', $game->id, ['id' => 'game_id']) }} 11 <p>{{ $game->name }}</p> 12 </div> 13 <div> 14 <label>レビュー</label></label><br> 15 <textarea name= "content" rows="10" cols="130"></textarea> 16 <div class="form-check"> 17 {{ Form::radio('score', '1', true, ['id' => 'exampleRadios', 'class' => 'form-check-input']) }} 18 {{ Form::label('score-one', '☆', ['class' => 'form-check-label']) }} 19 </div> 20 <div class="form-check"> 21 {{ Form::radio('score', '2', true, ['id' => 'exampleRadios', 'class' => 'form-check-input']) }} 22 {{ Form::label('score-two', '☆☆', ['class' => 'form-check-label']) }} 23 </div> 24 <div class="form-check"> 25 {{ Form::radio('score', '3', true, ['id' => 'exampleRadios', 'class' => 'form-check-input']) }} 26 {{ Form::label('score-three', '☆☆☆', ['class' => 'form-check-label']) }} 27 </div> 28 <div class="form-check"> 29 {{ Form::radio('score', '4', true, ['id' => 'exampleRadios', 'class' => 'form-check-input']) }} 30 {{ Form::label('score-four', '☆☆☆☆', ['class' => 'form-check-label']) }} 31 </div> 32 <div class="form-check"> 33 {{ Form::radio('score', '5', true, ['id' => 'exampleRadios', 'class' => 'form-check-input']) }} 34 {{ Form::label('score-five', '☆☆☆☆☆', ['class' => 'form-check-label']) }} 35 </div> 36 <div> 37 {!! Form::submit('送信', ['class' => "btn btn-primary btn-block"]) !!} 38 </div> 39 </div> 40{!! Form::close() !!} 41@endsection

Laravel

1<?php 2 3use Illuminate\Database\Migrations\Migration; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Support\Facades\Schema; 6 7class CreateReviewsTable extends Migration 8{ 9 /** 10 * Run the migrations. 11 * 12 * @return void 13 */ 14 public function up() 15 { 16 Schema::create('reviews', function (Blueprint $table) { 17 $table->bigIncrements('id'); 18 $table->unsignedBigInteger('user_id'); 19 $table->unsignedBigInteger('game_id'); 20 $table->integer('score'); 21 $table->string('content'); 22 $table->timestamps(); 23 24 $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 25 26 $table->foreign('game_id')->references('id')->on('games')->onDelete('cascade'); 27 28 $table->unique(['user_id', 'game_id']); 29 }); 30 } 31 32 /** 33 * Reverse the migrations. 34 * 35 * @return void 36 */ 37 public function down() 38 { 39 Schema::dropIfExists('review'); 40 41 } 42} 43

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

AWSを使用しています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

投稿者名をデータ上に持っているのでしたら、コントローラで事前にチェックしてフラグなり何なり渡してView側で表示切替すれば良いのではと

投稿2020/08/07 20:59

m.ts10806

総合スコア80850

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

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

natu494

2020/08/08 02:45

すみません理解力が足りていなくて申し訳ないのですが、createコントローラに記載すればいいのでしょうか?お時間をとらせてすみませんが、回答お願いします。
natu494

2020/08/08 03:13

m.ts10806様のプロフフィールを見て自分の利益だけを考えてしまい、申し訳ございませんでした。自分が初心者だからgiveしてもらって当然のように質問してしまいました。このような質問の仕方では自分の成長が見られないと思ったのでm.ts10806様にベストアンサーを渡します。教えてもらったことを参考に自分で解決します。本当に失礼な質問をしてしまい申し訳ございませんでした。
m.ts10806

2020/08/08 03:55

いえ、プロフィールのコメントにそこまで神経質にならなくとも良いと思います。「考え方」は一朝一夕では身に付きませんしね。 返事遅れたのは単にこどもと外出していて見れなかったからで、怒ったり呆れたりしているわけではありません。 今回は「表示時にそもそもボタンを表示させない」というところがポイントです。 既に投稿したかどうかデータで確認できる設計になっていれば、あとは如何様にもできるという話ですね。 DB設計次第なので、場合により設計から見直す必要はあります。
m.ts10806

2020/08/08 03:57

ついでに言及しておきますと、QAサイトでの「Give and Take」には「質問者の成長姿が見れる」というところもあると思います。きちんと理解が得られたとか考え方が身に付いたとか、そういう姿が見てとれれば、こちらも満足します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問