laravel:如何从数据库端过滤记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel:如何从数据库端过滤记录相关的知识,希望对你有一定的参考价值。

如何过滤数据库端的记录?我的意思是当我使用类似的东西

model::whereIn('id' , [1,2,3] )->get(['id' , 'name']) 

它检索所有列的记录,然后在php端过滤它们。无论如何在db端过滤rocords?

答案

试试这个

model::whereIn('id' , [1,2,3] )->select('id', 'name')->get() 
另一答案

您的代码已经执行了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 (?, ?, ?)
另一答案
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选择namemodel,其中id在(?,?,?)”

以上是关于laravel:如何从数据库端过滤记录的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:如何在控制器的几种方法中重用代码片段

如何根据使用 Laravel 连接的用户过滤记录?

下一页单击分页后Laravel过滤器重置

Laravel过滤与分页关系为空的记录

laravel 5 简单的 ajax 从数据库中检索记录

Ag Grid 如何从代码中设置过滤器服务器端