Как сделать запрос без использования Eloquent? - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть несколько таблиц:

проблемы 1. идентификатор 2. имя

метки 1. идентификатор 2. имя

Issue_tag 1. Issue_id 2. tag_id

изображений 1. идентификатор 2. URL 3. Issue_id

Соотношение этих таблиц указано ниже:

  • Проблема имеет много изображений, изображения принадлежит к проблеме
  • Проблемы принадлежат многим тегам, теги принадлежат многим проблемам

Как я могу получить все записи, НЕ ИСПОЛЬЗУЯ ELOQUENT , просто используя QUERY BUILDER . Я хотел бы получить данные в формате, например:

[
  {
    id: issue_id,
    name: issue_name,
    tags: [
            {
              id: tag_id_1,
              name: tag_name_1
            },
            {
              id: tag_id_2,
              name: tag_name_2
            }
          ]
  },
  {
   ...
  },
  ...
]

Пожалуйста, кто-нибудь, помогите мне, потому что я не мог решить эту проблему в течение длительного времени, я могу решить ее только с помощью Eloquent. Но использование Eloquent не является решением для меня.

Ответы [ 3 ]

0 голосов
/ 13 февраля 2020

Использовать можно Laravel DB :: select (); Функция С помощью выбора мы можем передать необработанный запрос SQL в select

 $innerData = [];
    $issueAll =  DB::select('select i.id,i.name,i2.url as image,t.id as tag_id,
                            t.name as tag_name,it.issue_id from issues as i
                            inner join issue_tag as it on it.issue_id=i.id
                            inner join tags as t on it.tag_id = t.id
                            inner join images as i2 on i.id = i2.issue_id
                            ');
    foreach ($issueAll as $issue) {
        $innerData[$issue->id]["id"] = $issue->id;
        $innerData[$issue->id]["name"] = $issue->name;
        if (isset($innerData[$issue->id]['tags'][$issue->issue_id])) {
            array_push($innerData[$issue->id]['tags'], ['id'=>$issue->tag_id, 'name'=>$issue->tag_name]);
        } else {
            $innerData[$issue->id]['tags'][$issue->issue_id] = ['id'=>$issue->tag_id, 'name'=>$issue->tag_name];
        }
    }
    return $innerData;

Ответ, который вы получите

{ 
   "1":{ 
      "id":1,
      "name":"issue1",
      "tags":{ 
         "1":{ 
            "id":1,
            "name":"tag1"
         },
         "2":{ 
            "id":1,
            "name":"tag1"
         }
      }
   },
   "2":{ 
      "id":2,
      "name":"issue2",
      "tags":{ 
         "2":{ 
            "id":1,
            "name":"tag1"
         }
      }
   }
}

Надеюсь, это поможет.

0 голосов
/ 14 февраля 2020

В laravel, если вы не хотите использовать eloquent, вы можете использовать с оператором DB :: (ваш запрос) и не забудьте использовать USE DB; вверху файла

0 голосов
/ 13 февраля 2020

Вы можете использовать запрос на присоединение. Для получения подробной информации перейдите по этой ссылке demo

или используйте оператор DB :: («ваш необработанный запрос здесь»). Надеюсь, это поможет.

...