Laravel Scout 为自定义引擎添加 with 预加载

首先为 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);
    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容