Laravel按组显示withCount()查询结果

时间:2019-08-14 14:12:42

标签: laravel laravel-blade

我有一个查询,其中我可以使用withCount()获得计数总数。

$applications = Application::with('company')->withCount([
            'task', 
            'task as task_updated_count' => function ($query) {
            $query->where('task_status', '!=', 1);

        }])->get();

在我看来,我可以循环浏览并显示结果。

<table class="table">
    <thead>
        <tr>
            <th>Applications</th>
            <th class="text-center">Tasks</th>
            <th class="text-center">Updated Tasks</th>
        </tr>
    </thead>
    <tbody>

        @foreach ($applications as $application)
            <tr>
                <td>{{ $application->company->company_acronym }}</td>
                <td>{{ $application->application_name }}</td>
                <td class="text-center">{{ $application->task_count }}</td>
                <td class="text-center">{{ $application->task_updated_count }}</td>
            </tr>
        @endforeach
    </tbody>
</table>

这显然会给我一张表格,列出结果,并为每个$ application列出$ application-> company-> company_acronym。

我要按公司“ $ application-> company-> company_acronym”列出应用程序。

结果将是:

公司1的首字母缩写词
    -AppName计数
    -AppName计数
    -AppName计数
公司2的首字母缩写
    -AppName计数
    -AppName计数
    -AppName计数
公司3的首字母缩写
    -AppName计数
    -AppName计数
    -AppName计数

2 个答案:

答案 0 :(得分:1)

在集合中使用groupBy函数按首字母缩写进行分组。

$applications = Application::with('company')->withCount([
    'task', 
    'task as task_updated_count' => function ($query) {
        $query->where('task_status', '!=', 1);
    }])->get();

$applicationGroups = $applications->groupBy(function($application) {
    return $application->company->company_acronym;
});

然后,您可以遍历各个组以获得所需的输出。

<table class="table">
    <thead>
        <tr>
            <th>Applications</th>
            <th class="text-center">Tasks</th>
            <th class="text-center">Updated Tasks</th>
        </tr>
    </thead>
    <tbody>
        @foreach ($applicationGroups as $group => $applications)
            <tr>
                <td colspan="3">{{ $group }}</td>
            </tr>
            @foreach ($applications as $application)
                <tr>
                    <td>{{ $application->application_name }}</td>
                    <td class="text-center">{{ $application->task_count }}</td>
                    <td class="text-center">{{ $application->task_updated_count }}</td>
                </tr>
            @endforeach
        @endforeach
    </tbody>
</table>

答案 1 :(得分:0)

请检查以下代码

$applications = Application::with('company')->with([
            'task'  => function ($query) {
        $query->where('task_status', '!=', 1)->count();

    }, 
        'task_updated_count' => function ($query) {
        $query->where('task_status', '!=', 1)->count();

    }])->get();