gpt4 book ai didi

Laravel 模型必须返回一个关系实例

转载 作者:行者123 更新时间:2023-12-05 02:11:42 26 4
gpt4 key购买 nike

我的网站有评论。这些评论可以有“投票”、赞成票和反对票。

我有一个评论模型和一个评论投票模型。

在我的评论模型中,我有一个返回投票的函数:

public function votes() {
return $this->hasMany('App\CommentVote', 'comment_id');
}

public function upvotes() {
return $this->hasMany('App\CommentVote', 'comment_id')->where('vote', 1);
}

public function downvotes() {
return $this->hasMany('App\CommentVote', 'comment_id')->where('vote', -1);
}

请注意,赞成票作为 1 存储在数据库中的 tinyInt 中,反对票存储为 -1

在我的 CommentVote 模型中,我有 belongsTo 关系:

public function comment() {
return $this->belongsTo('App\Comment');
}

现在我想要一个函数来计算评论的总“分数”。总赞成票减去总反对票。

我尝试制作一个函数来计算所有赞成票 - 所有反对票。

public function score() {
return $this->upvotes()->count() - $this->downvotes()->count();
}

这会返回错误:

App\Comment::score must return a relationship instance.

事实上,在任何地方使用 count() 都会返回此错误,尽管它在我的其他模型中运行良好。

做一些简单的事情,比如:

public function voteCount() {
return $this->hasMany('App\CommentVote', 'comment_id')->count();
or even
return $this->votes()->count();
}

将返回错误:

App\Comment::voteCount must return a relationship instance.

为什么会这样?

编辑:

根据评论中的要求,这是 Controller :

public function getSubmission($subchan, $id, $URLtitle) {

$submission = Submission::where('id', $id)->first();
$comments = Comment::where('submission_id', $submission->id)->where('parent_id', NULL)->orderBy('created_at', 'desc')->get();

$comments = $comments->sortByDesc(function($comment){
return count($comment['upvotes']) - count($comment['downvotes']);
});

if (!$submission) {
return redirect()->route('home')->with('error', 'Submission not found.' );
}

return view('submissions.submission')
->with('submission', $submission)
->with('navSubchan', $submission->getSubchan->name)
->with('submissionPage', 1)
->with('comments', $comments)
;

}

最佳答案

我怀疑您正在执行 $model->score,它将寻找一个名为 score() 的函数,但以一种特定的方式期望返回 HasManyHasOneBelongsTo 等样式关系对象的函数。

考虑 an accessor function相反。

public function getScoreAttribute() {
return $this->upvotes()->count() - $this->downvotes()->count();
}

允许您成功地执行 $model->score

关于Laravel 模型必须返回一个关系实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57096790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com