Как использовать систему комментариев actualmab \ laravel-comment?

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

Упаковка здесь: https://github.com/actuallymab/laravel-comment

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

Где я нахожусь:

Композитор готов

Миграции выполнены

в моей модели "Пользователь":

use Actuallymab\LaravelComment\CanComment;

В моей модели "Пост":

use Actuallymab\LaravelComment\Commentable;


class Posts extends Model { 
  use Commentable;
  protected $canBeRated = true;
  //etc
} 

В моем PostsController у меня есть:

public function comment()
{
  $userid = Auth::id();
  $postid = "1"; //static post id for testing

  $user = User::where('id','=',$userid);
  $post = Post::where('id','=',$postid)->first();

  $user->comment($post, 'Lorem ipsum ..', 3); // static comment for testing
}

И напоследок мой posts.blade:

<form action = "{{ route('posts.comment') }}" method = "POST">
    {{ csrf_field() }}
    <input type = "text" id = "commentdata"/> //not using this yet
    <div class = "form-group">
        <input type = "submit" class = "btn btn-primary" value = "Publish" />
        <a class = "btn btn-primary" href = "{{ route('posts.comment') }}">Cancel</a>
    </div>

К сожалению, когда я нажимаю кнопку отправки, я получаю:

"Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: comment ()"

Кажется, мне нужно определить функцию в моей модели User? Я не знаю, что здесь делать. Я надеюсь, что кто-то уже использовал этот пакет раньше.

Обновление 1:

Сейчас я использую следующий код PostsController:

public function comment()
{
  $userid = "1"; //static user id for testing
  $postid = "1"; //static post id for testing

  $user = User::find($userid);
  $post = Post::where('id','=',$postid)->first();

  $user->comment($post, 'Lorem ipsum ..', 3); // static comment for testing
}

Ошибка остается как «Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: comment ()».

Мне интересно, связано ли это с включением: use Actuallymab \ LaravelComment \ CanComment; Я вижу, что нужные мне файлы находятся в папке vendor / actualmab / laraval-comment / src, но я не уверен, как настроены помощники и т. д., Чтобы указать здесь.

someguy 20.03.2018 17:06
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
1
615
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Call to undefined method Illuminate\Database\Query\Builder

Вы можете быть почти уверены, что получили эту ошибку, потому что вы пропустили шаг: вы вызываете метод на построитель запросов, а не на модель. Вам необходимо получить модели из запроса.

Вот ваш текущий код:

$user = User::where('id','=',$userid);

Вам нужно получить первую модель из результатов, например:

$user = User::where('id','=',$userid)->first();

Хотя вы можете улучшить это, используя метод find, который принимает первичный ключ и возвращает модель, например:

$user = User::find($userid);

Затем вы готовы создать комментарий:

$user = User::find($userid);
$user->comment($post, 'Lorem ipsum ..', 3);

Пример использования трейта:

<?php 

namespace App;

use Actuallymab\LaravelComment\CanComment;

class User
{
    use CanComment;
}

Я действительно заметил, что пропустил -> first () прямо перед тем, как вы прокомментировали. Я добавил это, и это не имело значения. Я также попробовал ваше предложение использовать find ($ userid) и все еще получаю тот же результат.

someguy 20.03.2018 16:45

Обновите вопрос, включив в него код, который вы используете сейчас, и сообщение об ошибке, которое вы получаете,

sam 20.03.2018 16:47

Тогда я предполагаю, что проблема в том, что вы импортировали черту CanComment в свой класс User, но на самом деле не добавили черту, я обновил свой ответ примером того, как это сделать.

sam 20.03.2018 17:22

Спасибо. Да, я не импортировал трейт CanComment в свой пользовательский класс. Кроме того, мне нужно было «protected $ mustBeApproved = true;» в моей модели Post.

someguy 21.03.2018 02:36

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