如何过滤数据库端的记录?我的意思是当我使用类似的东西
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
选择name
,model
,其中id
在(?,?,?)”