You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何向mergeWhen函数传数组?现有场景能否改传请求值数组?

在Laravel中给mergeWhen传递数组条件的方法

当然可以实现!Laravel的mergeWhen方法第一个参数只需要是布尔值,所以你只需要把原来的单个值判断,改成检查请求参数是否属于你指定的一组值即可,具体分两种常见场景来说:

场景1:$request->stats是单个字符串值

如果$request->stats是单个字符串(比如前端传的是partner_count或其他单个标识),你可以用in_array()函数判断它是否在目标数组中,改写后的代码如下:

$this->mergeWhen(
    // 替换成你需要检查的一组请求值数组
    in_array($request->stats, ['partner_count', 'user_count', 'order_total']),
    ['partner_count' => $this->partner_count]
);

这段代码的逻辑是:当$request->stats的值是数组里的任意一个时,就会合并后面的partner_count字段。

场景2:$request->stats本身是数组(多选场景)

如果前端传的stats是一个数组(比如用户多选了多个统计项),你可以用array_intersect()判断两个数组是否有重叠项,只要有重叠就执行合并:

// 假设$request->stats是类似['partner_count', 'user_count']的数组
$this->mergeWhen(
    // 检查两个数组是否有交集,有则返回true
    !empty(array_intersect($request->stats, ['partner_count', 'user_count'])),
    [
        'partner_count' => $this->partner_count,
        'user_count' => $this->user_count
    ]
);

这样只要请求中的stats数组包含你指定的任意一个值,就会合并对应的字段。

额外灵活用法

如果你需要根据不同的stats值合并不同的字段,还可以结合闭包动态生成要合并的数组:

$this->mergeWhen(
    in_array($request->stats, ['partner_count', 'user_count']),
    function () use ($request) {
        $data = [];
        if ($request->stats === 'partner_count') {
            $data['partner_count'] = $this->partner_count;
        }
        if ($request->stats === 'user_count') {
            $data['user_count'] = $this->user_count;
        }
        return $data;
    }
);

这种方式能更精准地根据具体的stats值来合并对应字段。

内容的提问来源于stack exchange,提问作者sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:36:46