【问题标题】:How to query without using Eloquent?如何在不使用 Eloquent 的情况下进行查询?
【发布时间】:2020-05-28 18:58:38
【问题描述】:

我有这几张桌子:

问题
1. 身份证
2.名称

标签
1. 身份证
2.姓名

问题标签
1. issue_id
2. tag_id

图片
1. 身份证
2. 网址
3. issue_id

这些表的关系如下:

  • 问题有很多图像,图像属于问题
  • IssuesToMany 标签,标签 belongsToMany 问题

我怎样才能通过NOT USING 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 对我来说不是一个解决方案。

【问题讨论】:

标签: laravel laravel-5.6 laravel-query-builder


【解决方案1】:

您可以使用连接查询。详情请点击此链接demo

或者 使用 DB:: 语句('您的原始查询')。希望这会有所帮助。

【讨论】:

    【解决方案2】:

    可以使用 Laravel DB::select();功能 通过使用 select,我们可以将 Raw 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"
             }
          }
       }
    }
    

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      在 laravel 中,如果你不想使用 eloquent,那么你可以使用 DB::statement('your query') 并且不要忘记使用 USE DB;在文件的顶部

      【讨论】:

        猜你喜欢
        • 2017-08-03
        • 1970-01-01
        • 2021-01-21
        • 2015-12-22
        • 2022-01-03
        • 1970-01-01
        • 1970-01-01
        • 2018-01-06
        • 1970-01-01
        相关资源
        最近更新 更多