Php 如何在有说服力的关系查询中附加条件?

Php 如何在有说服力的关系查询中附加条件?,php,mysql,laravel,eloquent,eloquent-relationship,Php,Mysql,Laravel,Eloquent,Eloquent Relationship,我正在尝试创建过滤器,我只想通过使用一些条件将查询附加到关系。我不想把这些条件放在代码的第一块。那么,如何获取查询实例,以便将新查询附加到现有关系 $query = Category::query(); $query->where('category_type', 'xyz') ->with(['products' => function ($query) { $query->where('condition1',

我正在尝试创建过滤器,我只想通过使用一些条件将查询附加到关系。我不想把这些条件放在代码的第一块。那么,如何获取查询实例,以便将新查询附加到现有关系

    $query = Category::query();

    $query->where('category_type', 'xyz')
        ->with(['products' => function ($query) {
            $query->where('condition1', 'value')
                ->where('condition2', 'value');
        }]);


    if (isset($queryParams['param1'])) {
        $query->with(['products' => function ($query) use ($queryParams) {
            $query->getQuery()->where('type', $queryParams['param1']);
        }]);
    }
当前,它只是覆盖第一个查询关系条件。

这应该可以:

$query=Category::query; $query->where'category\u type',xyz' ->使用['products'=>函数$query使用$queryParams{ $query->where'condition1','value' ->其中“条件2”,“值”; 如果设置为$queryParams['param1']{ $query->where'type',$queryParams['param1']; } }];
为什么不在第一个函数本身中设置条件呢?@DhavalPurohit。但是我需要实例,这样我就可以按照我想要的方式附加,而不必在第一个函数中添加任何内容。您正在附加一个闭包,这就是为什么每次都会替换它。如果您想对关系设置条件,也可以使用whereHas。@DhavalPurohit我不确定如何将条件附加到该函数中的第一个关系。我上面贴的例子就是我正在做的修补工作。这很有效。但是我需要实例,这样我就可以按照我想要的方式附加,而不必在第一个函数中添加任何内容。因此,您需要在第一个函数之后克隆$query对象。我会检查它,并在这里回复