簡體   English   中英

Laravel Eloquent 查詢生成器與包裝的“位置”沒有關系

[英]Laravel Eloquent query builder no relation on wrapped 'where'

我制作了一個package 用於搜索具有 JSON 輸入的模型,該輸入具有在 Eloquent 模型上暴露的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');
    });
});

為什么這不起作用? 如何在包裹在外部where時使其加載關系?

我無法解釋為什么它不起作用的細節,但我想以下兩個選項之一可以解決它:

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');
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM