Laravel Красноречивый необработанный запрос без параметра «ОТ» - PullRequest
0 голосов
/ 17 января 2020

Мне нужно выполнить следующий SQL запрос через Laravel Eloquent:

SELECT COUNT(*) FROM 
(
    SELECT COUNT(*) FROM table GROUP BY field_1, field_2
) AS total

У меня не возникло бы проблемы, если бы я мог сделать это с помощью класса DB::, но Я вынужден использовать класс Eloquent:

Customers::select(DB::raw($sql))->first()->total;

Этот фрагмент кода возвращает следующее SQL:

SELECT COUNT(*) FROM 
(
    SELECT COUNT(*) FROM table GROUP BY field_1, field_2
) AS total FROM customers

И я хотел бы избавиться от "ОТ клиенты».

Ответы [ 2 ]

1 голос
/ 17 января 2020

вы можете использовать подзапросы в Eloquent, например:

DB::select(function ($query) {
    $query->selectRaw('COUNT(*) AS total')
        ->from('table')
        ->groupBy('field_1');
        ->groupBy('field_2');
}, 'table')->count('total');
0 голосов
/ 17 января 2020

Нет смысла использовать Eloquent для этого.

Customers::selectRaw('count(*)')->fromSub(function ($subquery) {
    $subquery->selectRaw('count(*)')
    ->from('table')
    ->groupBy(['field1','field2']);
}, 'total')
->get();

Запуск этого в консоли дает следующий результат:

--> use App\User; 
User::selectRaw('count(*)')->fromSub(function ($subquery) {
    $subquery->selectRaw('count(*)')
    ->from('table')
    ->groupBy(['field1','field2']);
}, 'total')
->toSql();

=> "select count(*) from (select count(*) from `table` group by `field1`, `field
2`) as `total`"

Вы заметите, что я использовал свой собственный модель. Это то, что я имел в виду, когда не было смысла использовать eloquent. С того момента, как вы вызываете from() или любой из его вариантов (в нашем случае fromSub), вы переходите к построителю запросов. И в этом случае вы даже не называете таблицу модели.

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