首页 > 解决方案 > Algolia Laravel Scout 复合 where 子句和急切加载

问题描述

由于 Laravel Scout 不支持比简单数字比较更复杂的 where子句。

我检查了源代码,发现以下几行

if (!empty($models = $model->getScoutModelsByIds($builder, $modelKeys))) {
                    $instances = $instances->merge($models->load($searchable->getRelations($modelClass)));
                }

实例是从 Algolia 搜索返回的内容,因此例如以下搜索基本上返回 $instances 变量。

Mode::search('something')->get();

$model是可搜索的模型,而getScoutModelsByIds基本上所做的是对数据库的查询,例如

public function getScoutModelsByIds(){
       $model->whereIn('id', $modelKeys)->get();
}

我想知道在实际从数据库中检索数据之前,我是否在模型上应用了任何类型的where子句或addSelect或预加载,这是个好主意吗?

例如

$model->where('some condition')->whereIn('id', $modelKeys)->get();

而不是使用延迟加载

$instances = $instances->merge($models->load($searchable->getRelations($modelClass)));

在从 db 检索数据之前使用with函数。

例如

$model->where('some condition')->whereIn('id', $modelKeys)->with('relationships')->get();

标签: laravelalgolialaravel-scout

解决方案


推荐阅读