我是Laravel的新手,我试图在某些帖子上实施评论系统。我找到了一个似乎得到很好支持的软件包,我认为通过使用它可以节省一些时间,而不是从头开始。
包装在这里: https://github.com/actuallymab/laravel-comment
有一些使用细节,但对于我这个级别的人来说,它们似乎不够清晰。
我在哪里:
完成作曲家
完成迁移
在我的"用户"型号:
use Actuallymab\LaravelComment\CanComment;
在我的" Post"模型:
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>
不幸的是,当我点击提交按钮时,我得到了:
&#34;调用未定义的方法Illuminate \ Database \ Query \ Builder :: comment()&#34;
所以我似乎需要在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
}
错误仍然是&#34;调用未定义的方法Illuminate \ Database \ Query \ Builder :: comment()&#34;
答案 0 :(得分:1)
调用未定义的方法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;
}