美文网首页
Laravel Scout 为自定义引擎添加 with 预加载

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

作者: 甘伍觉莫 | 来源:发表于2021-03-01 12:18 被阅读0次

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

    相关文章

      网友评论

          本文标题:Laravel Scout 为自定义引擎添加 with 预加载

          本文链接:https://www.haomeiwen.com/subject/syxafltx.html