开发者社区 问答 正文

在Laravel中使用子查询在具有多个条件的同一表中查找产品类型的计数?

我的问题可能不清楚,如果您听不懂请提。

这是我桌子的一部分,我吃不饱

问题

获取用户的所有应用程序计数 从选择项中删除前五个应用程序,并获得剩余的计数。 在上面的输出中,计数需要过滤产品类型并获得每种产品类型的计数。 尝试过的代码

$res_applications_count = CreateApplicationModel::where('rs_users_id', $sub_user_id)
    //->skip($skip)
    ->take($limit)
    ->where([
        ['application_status', '!=', 'Not Submitted'], 
        ['application_status', '!=', 'InProgress']
    ])
    ->whereBetween('created', [$sub_start_date, $sub_end_date])
    ->where('product_type', '=', "Residential")
    ->orderBy('created', 'DESC')
    ->get()
    ->count();

展开
收起
几许相思几点泪 2019-12-23 22:09:28 718 分享 版权
阿里云 AI 助理回答

看起来您正在使用Laravel框架的Eloquent ORM尝试从数据库中获取特定条件下的应用程序计数。您的需求分为几个步骤,我将逐一解释并提供相应的代码示例。

1. 获取用户的所有应用程序计数

首先,您需要获取用户的所有应用程序总数,不考虑任何过滤条件。这可以通过移除所有where条件来实现:

$totalApplicationsCount = CreateApplicationModel::where('rs_users_id', $sub_user_id)
    ->count();

2. 从选择项中删除前五个应用程序,并获得剩余的计数

这个需求稍微复杂一些,因为Eloquent没有直接提供“跳过前N个记录”的方法(虽然您在注释掉的代码中提到了->skip($skip))。但您可以先获取前5个应用的ID,然后排除这些ID来获取剩余的应用。这里简化处理,直接通过SQL限制和偏移量来实现:

$remainingAppsCount = CreateApplicationModel::where('rs_users_id', $sub_user_id)
    ->where([
        ['application_status', '!=', 'Not Submitted'], 
        ['application_status', '!=', 'InProgress']
    ])
    ->whereBetween('created', [$sub_start_date, $sub_end_date])
    ->orderBy('created', 'DESC')
    ->skip(5) // 跳过前5个
    ->count();

3. 在上面的输出中,计数需要过滤产品类型并获得每种产品类型的计数

为了获取按产品类型分组的计数,您可以使用groupBy方法。但是,请注意,当您同时使用skiptake时,分组可能不会按预期工作。因此,我们先获取所有满足条件的应用,然后进行分组计数:

$productTypeCounts = CreateApplicationModel::where('rs_users_id', $sub_user_id)
    ->whereIn('application_status', ['Submitted', 'Completed']) // 更简洁的状态筛选
    ->whereBetween('created', [$sub_start_date, $sub_end_date])
    ->get()
    ->groupBy('product_type')
    ->map(function ($group) {
        return $group->count();
    });

这样,$productTypeCounts会是一个集合,键是产品类型,值是对应类型的计数。

请注意,上述代码片段基于您提供的信息进行了调整和假设,实际应用时可能需要根据您的数据库结构和具体需求进一步调整。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
PHP
问答地址: