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

2021-03-01  本文已影响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);
    }

}

上一篇 下一篇

猜你喜欢

热点阅读