Laravel雄辩的查询生成器与包装的``哪里''没有关系

问题描述

我制作了一个package for searching models with JSON input,其中有一个 data(){ return { mainStr: "Hello,my name is Eldar and I'm web-developer",showStr: '' } },methods:{ showString() { for (let i = 0; i < this.mainStr.length; ++i) { this.delay(i); } },delay(i){ function delay() { setTimeout(() => { this.showStr += this.mainStr.charat(i) },2000) } } },mounted(){ this.showString(); } 宏在雄辩模型中公开。

在尝试包装查询时,我注意到一种奇怪的行为,因此我想知道自己是否做错了事。

例如,像这样加载关系:

search

在所有模型中加载关系,结果看起来都很好。

将其包装在附加的Builder::macro('search',function () { return $this->with('someRelation'); }); 子句中将导致它仅加载模型,而没有任何关联:

where

为什么这行不通?包裹在外部Builder::macro('search',function (array $input) { return $this->where(function (Builder $builder) { $builder->with('someRelation'); }); }); 中时,如何使其具有负载关系?

解决方法

我无法解释为什么它不起作用的细节,但我想以下两个选项之一可以解决它:

Builder::macro('search',function (array $input) {
    return $this->where(function (Builder $builder) {
        return $builder->with('someRelation'); // note added 'return'
    });
});

Builder::macro('search',function (array $input) {
    return $this->where(function (Builder $builder) {
        // return whatever
    })->with('someRelation');
});