Как использовать многостоловые запросы в Laravel без использования Eloquent Relationships - PullRequest
0 голосов
/ 25 апреля 2020

Я использую Laravel для создания API для моего приложения, позже оно будет интегрировано с интерфейсом реакции. У меня есть две таблицы, сообщение и комментарий. Таблица сообщений содержит информацию о сообщениях, а таблица комментариев содержит данные комментариев к каждому сообщению. Ниже приведена структура,

  • Таблица сообщений

post_id (первичный ключ) post_title post_description

  • Таблица комментариев

comment_id (первичный ключ) comment_text post_id (внешний ключ)

Мне нужно взять post_id, post_title из таблицы постов и общее количество комментариев к каждому посту из таблицы комментариев и хочу показать данные json. вот так

        {
            "post_id": 1,
            "post_title": "some title",
            "total comments": "4"

        },

Я знаю, как написать sql запросов для них, но у меня просто проблема с отображением данных, как указано выше. Ниже приведен код, который я использую.

$allPostQuery= DB::select('select * from post');

foreach($allPostQuery as $allPostQuery)

{

$postId= $allPostQuery->post_id;

$totalCommentsQuery= DB::select('select count(comment_id) as totalComments from comment where post_id=:postId',["postId" => $postId ]);

}

return \Response::json([$allPostQuery,$totalCommentsQuery]);

Но это не работает. Я запутался по поводу зацикливания идентификаторов сообщений, чтобы получить общее количество комментариев для каждого сообщения. Должен ли я сделать это в front-end, используя response foreach l oop? Любой может предложить любую помощь. Спасибо

1 Ответ

0 голосов
/ 25 апреля 2020

В соответствии с вашим вопросом вам нужны только ID сообщения, НАЗВАНИЕ и количество комментариев к каждому сообщению:

    $query = DB::select('
        SELECT 
            p.post_id, 
            p.title, 
            c.total AS totla_comments
        FROM posts p
        INNER JOIN 
        (
            SELECT post_id, COUNT(post_id) AS total FROM comments WHERE comments.post_id = post_id
            GROUP BY post_id

        ) c
        ON p.post_id = c.post_id
    ');

    echo json_encode($query);

Используйте json_encode (Laravel имеет функцию ->json()), если хотите возврат данных должен быть в формате JSON.

Глядя на ваш подход:

  1. Сначала вы запрашиваете сообщение
  2. Вы l oop сообщение снова и запросить комментарии

Это повлияет на скорость вашей работы и его следует избегать.

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