При необходимости логики для создания комментариев в Laravel - PullRequest
0 голосов
/ 24 июня 2018

Хорошо, значит, я хочу иметь возможность комментировать каждый мой пост.Комментарии будут иметь кнопку ответа для каждого.Это не многопоточность, поэтому один комментарий будет иметь много ответов.Эти ответы не будут иметь ответов.Также я хочу иметь возможность понравиться и не понравиться комментарий / ответ.Все это не будет привязано к пользовательской модели или любой другой.Публичные посетители смогут добавлять комментарии и отвечать на комментарии, но требуется одобрение.

Так вот логика, которую я получил до сих пор.Я на правильном пути (надеюсь, что этот пост может помочь кому-то еще):

Итак, я создаю Comment модель.А затем создайте таблицу с именем comments.И я создаю модель с именем Reply и таблицу с именем replies И, наконец, имя модели Like и ее таблицу likes

Таким образом, соотношение: comments будет иметь множество replies и replies принадлежит одному comment replies & comments будет иметь много likes.

А теперь по логике:

Я буду использовать AJAX для вызова функции store на CommentController для хранения комментариев.И я вызову функцию сохранения на ReplyController, чтобы сохранить ответы.Что касается лайков, функция LikeController store будет хранить лайки для комментариев и ответов.

Вот структура таблицы:

  1. Таблица комментариев

    • id
    • post_id
    • name
    • электронная почта
    • комментарий
    • одобрен
    • timestap
  2. Таблица ответов

    • id
    • comment_id
    • имя
    • электронная почта
    • комментарий (или ответ)
    • утверждено
    • отметка времени
  3. Таблица лайков

    • id
    • comment_id
    • reply_id
    • like
    • нелюбовь
    • отметка времени

Теперь я не понимаю, нравится таблица.Правильно ли иметь comment_id и reply_id, а также like и dislike?Я мог бы вызывать функцию store каждый раз, когда кто-то нажимает кнопку «Мне нравится» или «не нравится», и сохранять ее в таблице и обновлять столбец, если он является ответом или комментарием по его id, к соответствующим столбцам id.Правильна ли логика?

Кроме того, если у вас, ребята, есть какие-либо предложения или лучший и эффективный способ сделать это, пожалуйста, дайте мне знать.Это слишком долго, поэтому я просто оставлю это здесь.

Редактировать

Также забыл упомянуть, что я не уверен, как я буду переносить количество лайков из БД в клинок и считать его.Не с текущей структурой, упомянутой выше.Также как проверить и посмотреть, понравился ли уже человек.И если так, не позволяйте им снова нравиться или не нравиться.Любимый человек не может не любить.Они могут сделать только одно.

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Я не вижу необходимости в таблице ответов, просто используйте parent_id в таблице комментариев.Этот учебник может помочь вам начать Вложение комментариев в Laravel

0 голосов
/ 24 июня 2018

Я бы определенно рекомендовал связывать комментарии, ответы и лайки с User, что вы в значительной степени уже делаете с комментариями и ответами.

Есть способы, которыми вы могли бы иметь "симпатичную" систему, которая позволяла бы использовать гостевую систему, однако это было бы очень легко обойти и в конечном итоге сделать вашу "похожую" статистику бесполезной.


Пример структуры БД в будущем будет:

комментариев и ответов

  • ID
  • post_id // или comment_id, если в таблице ответов
  • user_id
  • корпус
  • одобрено
  • ("_at" даты)

любит

  • ID
  • likeable_id // идентификатор комментария или ответа
  • likeable_type // Комментарий или ответ
  • user_id
  • понравилось (логическое)
  • ("_ at" даты)

Таблица likes настроена для использования в качестве Полиморфного отношения, например. в вашей Comment модели:

public function likes()
{
    return $this->morphMany(Like::class, 'likeable');
}

Затем, чтобы добавить подобное, у вас будет что-то вроде:

$like = new Like(['user_id' => auth()->user()->id, 'liked' => true]); 
$comment->likes()->save();

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

public function authUserLike()
{
    return $this->morphOne(Like::class, 'likeable')->where('user_id', auth()->id());
}

Тогда, если auth_user_like равно null, им еще не понравился этот комментарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...