Scope left Join Sub не работает - Laravel - PullRequest
1 голос
/ 28 мая 2020

Я новичок в Laravel Я делаю клон Twitter. Я делаю область, чтобы получить все лайки из БД, но я получаю сообщение об ошибке от Tinker

Я знаю несколько базовых c 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'
        );
    }

Команда Tinker

App\Tweet::withLikes()->first();

Ошибка Tinker

TypeError: Аргумент 1, переданный в App / Tweet :: scopeWithLikes (), должен быть экземпляром Illuminate / Database / Query / Builder, заданным экземпляром Illuminate / Database / Eloquent / Builder, вызываемым в C: / wamp64 / www/laravel/tweety/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php онлайн 1164

Надеюсь, я хорошо объяснил, но если вам нужна дополнительная информация, спросите меня.

Спасибо за ваш ответ!

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Я думаю, что вы используете неправильный класс для своей области действия, используйте область действия

Illuminate / Database / Query / Builder

в качестве параметра при передаче

Illuminate / Database / Eloquent / Builder

в вашем файле модели Twit вверху ...

удалить:

use  Illuminate/Database/Eloquent/Builder;

и вставить:

use Illuminate/Database/Query/Builder;
0 голосов
/ 12 июня 2020

Это помогло решить проблему? Потому что я столкнулся с той же проблемой.

Когда я меняю Eloquent на Query, сообщение об ошибке остается прежним.

Также источник, указанный на Git использует использование

Illuminate\Database\Eloquent\Builder;

Hubert

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...