首先为 Laravel\Scout\Builder
生成宏命令
Builder::macro('with', function ($relations) {
$eagerLoad = $this->model->with($relations)->getEagerLoads();
$this->engine()->eagerLoad = array_merge($this->engine()->eagerLoad, $eagerLoad);
return $this;
});
然后在 Engine
类型添加如下属性, 并修改 map()
方法:
class ElasticsearchEngine extends Engine
{
public $eagerLoad = [];
public function map(Builder $builder, $results, $model)
{
## 之前的逻辑
if(!$this->eagerLoad) return $collect;
$models = $model->setEagerLoads($this->eagerLoad)->eagerLoadRelations($collect->all());
return $model->newCollection($models);
}
}