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
这些表格之间的关系如下所述:
- 问题有很多图片,图片属于问题
- 问题属于多个标签,标签属于多个问题
[
{
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')
方法,我应该如何联接表?请参见:这是编写原始语句的方式,顺便说一句: