Laravel 如何不使用雄辩的提问?

Laravel 如何不使用雄辩的提问?,laravel,laravel-5.6,laravel-query-builder,Laravel,Laravel 5.6,Laravel Query Builder,我有以下几张桌子: 问题 1.id 2.名字 标签 1.id 2.名称 问题标签 1.问题id 2.标签id 图像 1.id 2.url 3.问题id 这些表格之间的关系如下所述: 问题有很多图片,图片属于问题 问题属于多个标签,标签属于多个问题 我如何通过检索所有记录,而不是使用ELOQUENT,而只是使用查询生成器。我希望以如下格式检索数据: [ { id: issue_id, name: issue_name, tags: [ {

我有以下几张桌子:

问题
1.id
2.名字

标签
1.id
2.名称

问题标签
1.问题id
2.标签id

图像
1.id
2.url
3.问题id

这些表格之间的关系如下所述:

  • 问题有很多图片,图片属于问题
  • 问题属于多个标签,标签属于多个问题
我如何通过检索所有记录,而不是使用ELOQUENT,而只是使用查询生成器。我希望以如下格式检索数据:

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

请有人帮帮我,因为我很长时间不能解决这个问题,我只能用雄辩的语言来解决它。但对我来说,使用Eloquent并不是一个解决方案。

您可以使用join query。有关详细信息,请访问此链接

或 使用DB::语句('此处为原始查询')。希望这有帮助。

使用can-Laravel DB::select();功能 通过使用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"
         }
      }
   }
}

希望对您有所帮助。

在laravel中,如果您不想使用雄辩,那么您可以使用with DB::statement(“您的查询”),并且不要忘记使用DB;在文件的顶部

如果没有雄辩,你就不能使用人际关系。如果您不想使用ORM,最好使用原始查询编写整个过程。如果我想使用
DB::table('issues')
方法,我应该如何联接表?请参见:这是编写原始语句的方式,顺便说一句: