Привет. Никак не соображу, как в ларавеле реализовать добавление комментариев к конкретным постам. Создал таблицу comments с полями: comment_id - idшник коммента author_id - id перца, который комментит post_id - idшник поста, который комментят comment - сам коммент Такой вот метод PHP: public function store(Request $request) { $comment = new Comment(); $comment->comment = $request->comment; $comment->author_id = \Auth::user()->id; $comment->post_id = Post::find($post_id); <- Вот как тут правильно написать? $comment->save(); return redirect()->back()->with('success', 'Комментарий добавлен'); }
А откуда ты получаешь post_id? Из $request? Тогда можно так и написать PHP: $comment->post_id = $request->post_id; Хотя, более Laravel-way - это использование связей. С ними будет так: PHP: public function store(Request $request) { $post = Post::findOrFail($request->post_id); $comment = new Comment(); $comment->comment = $request->comment; $comment->author_id = \Auth::user()->id; $post->comments()->save($comment); return redirect()->back()->with('success', 'Комментарий добавлен'); } А в зависимости от того, что прописано в Comment как fillable, можно и ещё сократить. Вкуривай: https://laravel.com/docs/6.x/eloquent-relationships#the-save-method
Не знаю, хорошая это практика или нет, но решил проблему так: Под формой сделал скрытое поле HTML: <input type="hidden" value="{{ $post->post_id }}" name="post_id"> и просто принимаю его в методе PHP: public function store(Request $request) { $comment = new Comment(); $comment->comment = $request->comment; $comment->author_id = \Auth::user()->id; $comment->post_id = (int)$request->input('post_id'); $comment->save(); return redirect()->back()->with('success', 'Комментарий добавлен'); }
Практика ламерская. Для тех, кто размещает POST-обработчик по фиксированному адресу, не связанному с постом.
Прелесть Eloquent в том, что он уже содержит защиту от SQL-инъекций, ничего дополнительного делать не нужно.