投稿に紐づくコメント機能を作っています。
例えば同一ページからは、コメントできるようになっているのですが
ファイルを新たに作成、そこで専用のコメント機能をつけようとすると
投稿idが呼び出されておらずerror(must be of the type int, null given, )になります。
下記にコードを貼り付けさせて頂きます。
SentencesController public function create(Sentence $sentence, Book $book) { $user = auth()->user(); $sentences = $sentence->getSentences($book->id); return view('sentences.create',[ 'user' => $user, 'book' => $book, 'sentences' => $sentences, ]); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request, Book $book, Sentence $sentence) { $user = auth()->user(); $data = $request->all(); $validator = Validator::make($data, [ 'book_id' => ['required', 'integer'], 'text' => ['required', 'string', 'max:2000'] ]); $validator->validate(); $sentence->sentenceStore($user->id, $data); return redirect()->back(); }
Model Sentence class Sentence extends Model { protected $filable = [ 'text', 'book_id' ]; public function user() { return $this->belongsTo(User::class); } public function getSentences(Int $book_id) { return $this->with('user')->where('book_id', $book_id)->get(); } //sentencesのstoreメソッドの作成、引数はidとテキストを配列で public function sentenceStore(Int $user_id, Array $data) { $this->user_id = $user_id; $this->book_id = $data['book_id']; $this->text = $data['text']; $this->save(); return; } }
view <h1>詳細画面</h1> <p><a href="{{ route('books.index')}}">一覧画面</a></p> <table border="1"> <tr> <th>id</th> <th>title</th> <th>over_view</th> <th>画像</th> </tr> <tr> <td>{{ $book->id }}</td> <td>{{ $book->title }}</td> <td>{{ $book->over_view }}</td> {{-- <img src="/storage{{$book->book_image}}"> --}} <img src="{{ URL::to('public/storage') }}/{{ $book->book_image }}" alt="{{ $book->book_image }}" /> </tr> </table> <th><a href="{{ route('sentences.create',$book->id)}}">コメント</a></th> <div class="col-xs-8 col-xs-offset-2"> @foreach($sentences as $sentence) <tr> <td>{{ $sentence->text }}</td> </tr> @endforeach
viewはかなり簡易的です。
原因はviewの
<th><a href="{{ route('sentences.create',$book->id)}}">コメント</a></th>
この部分だと思っております。
ここでidを紐付けできるコードがかければ、コントローラーにidが通ってmodelのgetSentencesメソッドがうまく行ってくれるのではないかと考えております。
どなたかよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/20 12:24
2020/07/21 02:10
2020/07/21 02:20
2020/07/21 02:32
2020/07/21 02:59
2020/07/21 04:41
2020/07/21 05:38
2020/07/21 05:54