Как перевести этот запрос из SQL (mysql) в Eloquent (Laravel) - PullRequest
0 голосов
/ 22 сентября 2018

При написании пользовательского запроса, который возвращает пользователей с сгруппированными сообщениями и подсчетом общего количества созданных ими сообщений

запрос в SQL

SELECT users.nameUser, COUNT(posts.namePost) AS Total, GROUP_CONCAT(posts.namePost) AS List
FROM users
JOIN posts ON users.id = posts.user_id
GROUP BY users.nameUser;
+----------+-------+-----------------------+
| nameUser | Total | List                  |
+----------+-------+-----------------------+
| alfa     |     2 | PHP 7,Aire comprimido |
| beta     |     2 | HTML 5,MySQL 8        |
+----------+-------+-----------------------+

вопрос в том, как построить этот запрос с помощью Eloquent Laravel или даже с его помощью построителя запросов?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Вы можете передать необработанную строку запроса как оператор БД:

$data = DB::statement('
    SELECT users.nameUser, COUNT(posts.namePost) AS Total, 
    GROUP_CONCAT(posts.namePost) AS List
    FROM users
    JOIN posts ON users.id = posts.user_id
    GROUP BY users.nameUser
')->get();
0 голосов
/ 22 сентября 2018

Это только способ сделать это, используя Eloquent ORM, а для определенных задач использовать Fluent

$data = User::select('users.nameUser')
           ->selectRaw('COUNT(posts.namePost) AS Total')
           ->selectRaw('GROUP_CONCAT(posts.namePost) AS List')
           ->join('posts', 'users.id', '=', 'posts.user_id')
           ->groupBy('users.nameUser')
           ->get();

Полезные вещи

  1. Вы можете использовать метод selectRaw() вместоDB::raw() метод
  2. Я использую модель User, чтобы не включать больше кода построителя запросов
  3. Я использую groupBy() метод
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...