За последние 24 часа нас посетили 22270 программистов и 1165 роботов. Сейчас ищут 685 программистов ...

Как правильно получить id записи Laravel?

Тема в разделе "Laravel", создана пользователем Anton999, 7 фев 2020.

Метки:
  1. Anton999

    Anton999 Новичок

    С нами с:
    3 янв 2020
    Сообщения:
    16
    Симпатии:
    0
    Привет.
    Никак не соображу, как в ларавеле реализовать добавление комментариев к конкретным постам.

    Создал таблицу comments с полями:
    comment_id - idшник коммента
    author_id - id перца, который комментит
    post_id - idшник поста, который комментят
    comment - сам коммент

    Такой вот метод
    PHP:
    1. public function store(Request $request)
    2.     {
    3.         $comment = new Comment();
    4.         $comment->comment = $request->comment;
    5.         $comment->author_id = \Auth::user()->id;
    6.         $comment->post_id = Post::find($post_id);  <- Вот как тут правильно написать?
    7.  
    8.         $comment->save();
    9.  
    10.         return redirect()->back()->with('success', 'Комментарий добавлен');
    11.    
    12.     }
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    А откуда ты получаешь post_id? Из $request? Тогда можно так и написать
    PHP:
    1. $comment->post_id = $request->post_id;
    Хотя, более Laravel-way - это использование связей. С ними будет так:
    PHP:
    1. public function store(Request $request)
    2.     {
    3.         $post = Post::findOrFail($request->post_id);
    4.         $comment = new Comment();
    5.         $comment->comment = $request->comment;
    6.         $comment->author_id = \Auth::user()->id;
    7.  
    8.         $post->comments()->save($comment);
    9.        
    10.         return redirect()->back()->with('success', 'Комментарий добавлен');
    11.    
    12.     }
    А в зависимости от того, что прописано в Comment как fillable, можно и ещё сократить. Вкуривай: https://laravel.com/docs/6.x/eloquent-relationships#the-save-method
     
  3. Anton999

    Anton999 Новичок

    С нами с:
    3 янв 2020
    Сообщения:
    16
    Симпатии:
    0
    Не знаю, хорошая это практика или нет, но решил проблему так:
    Под формой сделал скрытое поле
    HTML:
    1. <input type="hidden" value="{{ $post->post_id }}" name="post_id">
    и просто принимаю его в методе
    PHP:
    1. public function store(Request $request)
    2.     {
    3.         $comment = new Comment();
    4.         $comment->comment = $request->comment;
    5.         $comment->author_id = \Auth::user()->id;
    6.         $comment->post_id = (int)$request->input('post_id');
    7.  
    8.         $comment->save();
    9.  
    10.         return redirect()->back()->with('success', 'Комментарий добавлен');  
    11.     }
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Практика ламерская. Для тех, кто размещает POST-обработчик по фиксированному адресу, не связанному с постом.
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Прелесть Eloquent в том, что он уже содержит защиту от SQL-инъекций, ничего дополнительного делать не нужно.