laravel:如何从数据库端过滤记录
Posted
技术标签:
【中文标题】laravel:如何从数据库端过滤记录【英文标题】:laravel : how to filter records from database side 【发布时间】:2018-09-30 01:32:37 【问题描述】:如何过滤数据库端的记录?我的意思是当我使用类似的东西时
model::whereIn('id' , [1,2,3] )->get(['id' , 'name'])
它检索所有列的记录,然后在 php 端过滤它们。无论如何要过滤 db 端的 rocords 吗?
【问题讨论】:
这不是真的。列已在数据库中过滤。为什么你认为他们没有? 【参考方案1】:您的代码已经这样做了 get(['id', 'name'])
在执行查询之前会在内部覆盖 SQL select
列。它不会获取所有列,然后过滤掉不必要的列。
它与其他答案中建议的->select('id', 'name')->get()
完全相同,只是使用的较短版本(Laravel 有很多这些替代方法允许开发人员使用他们认为正确/可读的任何东西)。
如果需要,您可以通过以下方式转储执行的最后一个查询:
DB::enableQueryLog();
YourModel::whereIn('id' , [1,2,3])->get(['id' , 'name']);
dd(DB::getQueryLog());
您会看到它输出以下查询:
select `id`, `name` from `your_model` where `id` in (?, ?, ?)
【讨论】:
【参考方案2】:Model::whereIn('id' , [1,2,3] )->select('id', 'name')->get();
要验证您是否在数据库端进行过滤,请将 get
替换为 toSql()
。
$result = Model::whereIn('id' , [1,2,3] )->select('id', 'name')->toSql();
dd ( $result );
你会得到以下结果
“选择
id
,name
frommodel
whereid
in (?, ?, ?)”
【讨论】:
【参考方案3】:试试这个
model::whereIn('id' , [1,2,3] )->select('id', 'name')->get()
【讨论】:
以上是关于laravel:如何从数据库端过滤记录的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Ajax 加载过滤后的数据,而无需在 laravel 中重新加载整个页面
如何从 Laravel 后端获取数据并在 Vue/Nuxt 前端显示