首页 > 解决方案 > 如何在 laravel 中对 groupBy 查询求和列?

问题描述

我在数据库中有多个具有相同产品名称的记录。现在我希望所有记录都应该出现一次,但它们的数量列应该被总结。我想按月和按年汇总数量。

它基本上会按年和月显示产品的摘要。

订单表迁移

 public function up()
    {
        Schema::create('orders', function (Blueprint $table) {
            $table->id();
            $table->string('amzid',500)->nullable();
            $table->string('samid',500)->nullable();
            $table->string('quantity',500)->nullable();
            $table->string('samq',500)->nullable();
            $table->text('samp',5000)->nullable();
            $table->text('same')->nullable();
            $table->string('pname',7000)->nullable();
            $table->text('note')->nullable();
            $table->timestamps();
        });
    }

这是虚拟查询,我不知道如何开始

Order::groupBy('pname')->sum('quantity')->lastthirtyDay() ??

标签: phpdatabaselaravellaravel-5eloquent

解决方案


尝试在集合上使用 groupBy

$last30Days = Instock::whereDate('created_at', '>', now()->subMonth())->get()
    ->groupBy('pname')
    ->mapWithKeys(function($item, $pname){
        return [$pname => $item->sum('quantity')];
    });

$lastOneYear = Instock::whereDate('created_at', '>', now()->subYear())->get()
    ->groupBy('pname')
    ->mapWithKeys(function($item, $pname){
        return [$pname => $item->sum('quantity')];
    });

顺便说一下数量列应该是数字类型,如整数和无符号。

对于任何需要包含超过 255 个字符的列,请使用 text/mediumText/longText 作为列数据类型。

Laravel 文档:https ://laravel.com/docs/8.x/migrations#available-column-types


推荐阅读