【问题标题】:How to use actuallymab\laravel-comment comments system?如何使用actualmab\laravel-comment 评论系统?
【发布时间】:2018-08-29 11:57:56
【问题描述】:

我是 Laravel 的新手,我正在尝试在一些帖子上实现 cmets 系统。我找到了一个似乎得到很好支持的包,我想我可以通过使用它而不是从头开始来节省一些时间。

包装在这里: 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()"

所以看来我需要在我的用户模型中定义一个函数?我不确定在这里做什么。我希望有些人以前使用过这个包。

更新 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()”

【问题讨论】:

  • 我想知道这是否与包含有关:使用Actuallymab\LaravelComment\CanComment;我可以看到我需要的文件在 vendor/actuallymab/laraval-comment/src 文件夹下,但我不确定帮助程序等是如何设置到这里的。

标签: laravel


【解决方案1】:

调用未定义的方法 Illuminate\Database\Query\Builder

您几乎可以肯定,当您收到此错误时,这是​​因为您错过了一个步骤:您正在调用 query builder 而不是 model 上的方法.您需要从查询中检索模型。

这是您当前的代码:

$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) 的建议,但仍然得到相同的结果。
  • 请更新问题以包含您现在使用的代码和您收到的错误消息,
  • 我猜想问题是你已经在你的 User 类中导入了 CanComment 特征,但你实际上并没有添加这个特征,我已经用一个如何做到这一点的例子更新了我的答案.
  • 谢谢。是的,我没有在我的用户类中导入 CanComment 特征。此外,我需要“受保护的 $mustBeApproved = true;”在我的 Post 模型中。
猜你喜欢
  • 2016-05-02
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
相关资源
最近更新 更多