вложенные запросы в laravel - PullRequest
0 голосов
/ 17 октября 2019

Вот мой sql, я изо всех сил пытаюсь перевести это на синтаксис построителя запросов laravel 5.8.

    SELECT CC AS CountOfVisits, Count(CC) AS Users
    FROM
        (
        SELECT user_id, count(user_id) AS CC FROM mytable
        GROUP BY user_id
        ) AS CC
    GROUP BY CC;

Я пробовал это:

     $frequency= DB::connection('mysql2')
            ->select(DB::raw('CC AS CountOfVisits'), DB::raw('Count(CC) AS Users'))
            ->from(function($sq)
            {
               $sq->select(DB::raw('user_id, count(user_id) AS CC FROM '))
                    ->from('mytable')
                    ->groupBy('user_id');
            })
            ->groupBy('CC')
            ->get();

это ошибки с

Аргумент 1, передаваемый в Illuminate \ Database \ Connection :: prepareBindings (), должен иметь тип массива, заданный объект должен называться в / var / app / portal / vendor / laravel / framework / src / Illuminate / Database /Connection.php на линии 665

Любая помощь будет здорово, спасибо

1 Ответ

0 голосов
/ 17 октября 2019

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

$query = DB::query()
    ->select('CC AS CountOfVisits', DB::raw('count(CC) AS Users'))
    ->fromSub(function (\Illuminate\Database\Query\Builder $query) {
        $query->select('user_id', DB::raw('count(user_id) AS CC '))
            ->from('mytable')
            ->groupBy('user_id');
    }, 'CC')
    ->groupBy('CC');

$result = DB::connection()->select($query->toSql());

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