【发布时间】:2020-09-16 01:14:03
【问题描述】:
我是 Laravel 的新手,我正在克隆 Twitter。我正在创建一个范围以从数据库中获取所有喜欢,但我从 Tinker 收到错误
我知道一些基本的 SQL 查询,但是这个很复杂,所以我现在不知道该怎么做。
推特模型
public function scopeWithLikes(Builder $query)
{
$query->leftJoinSub(
'select tweet_id, sum(liked) likes, sum(!liked) dislikes from likes group by tweet_id',
'likes',
'likes.tweet_id',
'tweet.id'
);
}
修补命令
App\Tweet::withLikes()->first();
修补错误
TypeError: 传递给 App/Tweet::scopeWithLikes() 的参数 1 必须是 Illuminate/Database/Query/Builder 的实例, Illuminate/Database/Eloquent/Builder 给定,调用 C:/wamp64/www/laravel/tweety/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php 在第 1164 行
我希望我解释得很好,但如果您需要更多信息,请询问我。
感谢您的回答!
【问题讨论】:
-
我认为您不应该在这里使用范围。根据 Laravel 文档,范围旨在为查询添加约束,而不是附加新数据。 laravel.com/docs/7.x/eloquent#global-scopes
-
检查文件顶部的 use 声明...您的 ide 在 autocomplete 中提供 2 ,可能将其更改为错误中预期的那个
标签: laravel