【问题标题】:Scope left Join Sub doesn't work - Laravel范围左连接子不起作用 - Laravel
【发布时间】: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


【解决方案1】:

我认为你的作用域使用了错误的类,作用域使用

照亮/数据库/查询/生成器

作为传递时的参数

Illuminate/Database/Eloquent/Builder

在您的 Twit 模型文件中,在顶部 ...

删除:

use  Illuminate/Database/Eloquent/Builder;

并粘贴:

use Illuminate/Database/Query/Builder;

【讨论】:

    【解决方案2】:

    这是否解决了问题?因为我遇到了完全相同的问题。

    当我将 Eloquent 更改为 Query 时,错误信息仍然相同。

    Git 上给出的来源也使用 use

    Illuminate\Database\Eloquent\Builder;
    

    休伯特

    【讨论】:

    • 你能发布你的错误吗
    猜你喜欢
    • 1970-01-01
    • 2016-05-04
    • 2015-12-02
    • 1970-01-01
    • 2012-09-10
    • 2019-02-02
    • 1970-01-01
    相关资源
    最近更新 更多