Laravel DB::select($query)

Posted

技术标签:

【中文标题】Laravel DB::select($query)【英文标题】: 【发布时间】:2021-01-28 18:46:53 【问题描述】:

我正在开发一个 Laravel 项目,该项目从输入中执行自定义 SQL 命令。我有以下功能。

路线

 Route::patch('/form-submit', function(Request $request)
  $query = $request->input('query');
  return view('welcome', compact('query'));
);

Welcome.blade.php

<form method="POST" enctype="multipart/form-data" action="/form-submit" class="text-end">
    method_field('PATCH') 
   @csrf
   <input name="query" value=" $query " id="input" class="form-control w-20">
   <button type="submit" id="button" class="btn btn-sm btn-info mt-3">Submit</button>
 </form>

<?php
  $querys = DB::select($query);
?>

现在我想遍历 SQL 命令给我的所有值。 例如,对于输入“SELECT * from users”,我将获取所有用户,并可以使用以下命令显示他们的姓名:

@foreach($querys as $data)

  $data->name

@endforeach

但我想显示用户的所有数据,包括姓名、性别、身份证、年龄等。我尝试了多个选项,但还没有找到解决方案。查询总是不同的,所以我不知道我必须显示什么数据。例如,如果我输入“SELECT * from notifications”,我想将数据库中的所有信息添加到一个表中。

谁能帮帮我?

谢谢

【问题讨论】:

您正在执行的查询在哪里?代码在哪里 代码在刀片中,我有一个带有名称查询的输入: 显示您正在调用查询的代码...不应该在视图中 我现在更新了代码 你知道这是一个可怕的想法,对吧?直接从用户获取 sql 查询并针对数据库运行它 【参考方案1】:

您可以使用-&gt;toArray() 方法从模型返回数组,然后您将拥有关联数组。你可以这样做

@foreach($querys as $field=>$value)

<p> $field = $value </p>

@endforeach

$field 是表中的字段名称,$value 是列值。如果您有多个结果,您还需要检查嵌套

【讨论】:

我试过这个但我得到以下错误:tmlspecialchars() 期望参数 1 是字符串,给定对象 是的,如果您有多个结果,您将拥有所有元素都是对象的数组。所以你需要两个循环,在第二个循环中你可以得到你的结果 这就是我所说的嵌套。我认为您应该先查询然后在您的服务(或您有业务逻辑的地方)解析结果,然后将结果数组返回到您的模板 它可以工作,但现在我只能得到值。例如对于具有 "id":2,"name":"user2" 的用户,我可以只显示 2 和 user2。关于如何显示 id 和 name 的任何想法? 你使用这样的循环@foreach($querys as $field=&gt;$value) 吗?这里$field必须是你的键idname

以上是关于Laravel DB::select($query)的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 4 中转义原始 SQL 查询

DB::Table 和 DB::Select 之间的区别

Laravel 原始查询不返回结果

Laravel DB::select() 不返回“正确”数据

在 Laravel 7.x 中从 DB::select 获取单个值

有 DB::select() 时如何使用 laravel 关系?