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】:您可以使用->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=>$value)
吗?这里$field
必须是你的键id
和name
以上是关于Laravel DB::select($query)的主要内容,如果未能解决你的问题,请参考以下文章
Laravel DB::select() 不返回“正确”数据