Ограничить комментарий в сообщении Laravel

Так вот в чем проблема, у меня есть приложение с постом и комментарием. Но я хочу ограничить количество комментариев для каждого пользователя, поэтому, если есть 1 сообщение, только 1 комментарий для каждого пользователя. Является ли это возможным ?

Вот моя функция store в CommentController:

public function store(Request $request, $post)
{
    $this->validate($request, array(
        'title' => 'required|max:200',
        'desc' => 'required|max:800'
    ));
    $comments = new Comment();
    $comments->id_user = Auth::id();
    $comments->id_post = $post;
    $comments->title = $request->A;
    $comments->desc = $request->B;
    $comments->save();
    return redirect()->route('controller.index');
}

Какой запрос я могу добавить в эту функцию store, чтобы ограничить пользователя возможностью комментировать только один раз в 1 сообщение. Спасибо, ребята, надеюсь, вы можете мне помочь.

Что такое $incase? Каков идентификатор публикации, к которой относится этот комментарий?

Don't Panic 20.09.2018 09:52

извини, уже отредактировал это

Ayam Geprek 20.09.2018 09:57

В зависимости от вашей логики, я предполагаю, что у вас есть таблица с комментариями. Это должно включать идентификатор сообщения и идентификатор комментария, а также идентификатор пользователя. Идентификатор сообщения связывает комментарий с сообщением, идентификатор комментария является первичным ключом таблицы комментариев, а идентификатор пользователя связан с пользователем, который оставил комментарий. Затем вы производите подсчет идентификатора комментария в таблице комментариев, где идентификатор сообщения равен рассматриваемому сообщению, а идентификатор пользователя совпадает с идентификатором пользователя. Затем сделайте заявление if вокруг этого.

Martin 20.09.2018 09:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
376
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Очень просто вам нужно проверить, существует ли уже комментарий для пользователя и публикации, например:

if (! Comment::where('id_user', $userId)->where('id_post', $postId)->exists()) {
   //save the comment
} else {
   // do not save the comment
}

В вашем случае $userId может быть Auth::user()->id, а $ postId - $post->id.

что такое $ userid и $ postid, это неопределенная переменная?

Ayam Geprek 20.09.2018 10:05

Я обновил ответ, но вы уже должны самостоятельно выяснить, что такое $ userId и $ postId ...

Martin 20.09.2018 10:09

Вы должны попробовать это

Проверить комментарий, добавленный к этому сообщению этим пользователем

$result = DB::table('comments')->where('id_user', '=', Auth::id())->where('id_post', '=', $incase->id)->get();

if (count($result) < 1){
    $comments = new Comment();
    $comments->id_user = Auth::id();
    $incase = Incase::find($id);
    $comments->id_post = $incase->id;
    $comments->title = $request->A;
    $comments->desc = $request->B;
    $comments->save();
    return redirect()->route('controller.index');
}
else{
    return redirect()->route('controller.index')->with('warning','Already Commented');
}

ИЛИ

Скрыть поле комментариев для этого пользователя, если сохранен один комментарий

Другие вопросы по теме