【问题标题】:Laravel Eloquent how pass variable to with relationship function nestedLaravel Eloquent 如何通过嵌套的关系函数传递变量
【发布时间】:2022-06-29 16:45:04
【问题描述】:

我希望将变量传递给与 eloquent 的嵌套关系。 我读了这个Laravel Eloquent pass variable to with relationship function,但在那个答案中它没有看到嵌套关系。

我有这种情况:

Category::where("company", $company)->whereNull("parent_ecommerce_id")->with(['children']);

我的模型

public function children() {
    return $this->hasMany(Category::class,'parent_ecommerce_id','category_ecommerce_id')->with("children");
}

我可以按照发布的链接中的建议修改我的第一次通话

Category::where("company", $company)->whereNull("parent_ecommerce_id")->with(['children' => function($query) use ($company) {
    $query->where("company", $company);
}]);

它在第一次调用时有效,但在嵌套回调中,我没有更多带有“公司”的过滤器。如何过滤所有嵌套关系中的公司?我想将变量传递给“children($var)”,但我没有找到在“with”语句中传递它的解决方案。

【问题讨论】:

    标签: php laravel eloquent relationship


    【解决方案1】:

    如果我没听错的话,我相信应该更像这样。

    如果您要实现的目标是获取所有包含子项的类别,其中公司已被过滤。

    Category::where("company", $company)->whereNull("parent_ecommerce_id")->whereHas('children', function($query) use ($company) {
        $query->where("company", $company);
    }])->with(['children']);
    

    【讨论】:

    • 不,children 不是 DB 的“列”。孩子是模型“类别”中的关系。所以我不能在关系上插入“whereHas”......
    【解决方案2】:

    我认为这种方式是不对的,如果需要第二个变量过滤器,我们必须使用另一种方式来获取所有类别树,如下所述https://www.youtube.com/watch?v=hFxR6D2kH44

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      • 2020-04-04
      • 2019-01-30
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多