laravel - 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();
解决方案
推荐阅读
- php - 从没有 xml 的纯文本中提取记录值
- r - 将单列变量转换为多列
- pandas - 如果 Pandas 数据框中没有,Multindex 添加零值
- wordpress - 首先按自定义分类对cpt进行排序,然后是帖子的其余部分
- c++ - *& vs & 将变量传递给函数
- amazon-web-services - AWS SQS 问题。此 wsdl 版本不存在指定的队列
- node.js - 尝试执行 POST 请求时出现 [ERR_TLS_CERT_ALRTNAME_INVALID] 错误
- ruby-on-rails - 如何重定向到相同控制器动作的另一种格式?
- python - 控制条形图中分组条形之间的空间
- django - /profiles/adminKaLogin/ Django 中的 MultiValueDictKeyError