【问题标题】:Laravel groupby and count different values (Polymorphic)Laravel groupby 并计算不同的值(多态)
【发布时间】:2020-02-22 14:40:27
【问题描述】:

我有一个名为“reportable”的表格,并希望在网站的表格中显示条目。不幸的是,我无法正确查询数据库,我对一对多(多态)表没有太多经验。

数据库表:

Schema::create('reportable', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('user_id')->unsigned()->nullable()->index();
            $table->foreign('user_id')->references('id')->on('users')->onDelete('set null');
            $table->integer('reason');
            $table->integer('reportable_id')->index();
            $table->string('reportable_type')->index();
            $table->text('notice')->nullable();
            $table->tinyInteger('status')->default(0)->index();
            $table->timestamps();
        });

在网页上的表格中,我只想显示具有相同reportable_id 和reportable_type 的条目一次。

另外,reportable_id和reportable_type相同的条目应该被统计并显示为数值。

此外,reportable_id 和reportable_type 相同的“原因”列中的条目应与相应条目一起计数并显示为数值。

【问题讨论】:

  • 请详细说明您尝试了哪些查询以及结果与预期有何不同。否则这听起来就像一个“做我的工作”的问题。

标签: mysql database laravel eloquent


【解决方案1】:

如果你想要一个列表:

    $query = Report::select(\DB::raw('reportable.reportable_id,reportable.reportable_type,SUM(reason) as reason_total'))  // Or \DB::raw('reportable.*,SUM(reason) as reason_total')
        ->groupBy('reportable_type')
        ->groupBy('reportable_id')
        ->get();

如果你想有一个特定的行,你应该有这样的查询:

    $reportableId = 1; // $reportableId = Input::get('report_id'); // It can come from get parameters     http://localhost/reports?report_id= 1
    $reportableType = 'User'; 

    $query = Report::select(\DB::raw('reportable.reportable_id,reportable.reportable_type,SUM(reason) as reason_total'))  // Or \DB::raw('reportable.*,SUM(reason) as reason_total')
        ->groupBy('reportable_type')
        ->groupBy('reportable_id')
        ->get();


    if($reportableId)
        $query =  $query->where('reportable_id' , $reportableId );

    if($reportableType)
        $query =  $query->where('reportable_type' , $reportableType );

    return $query;

【讨论】:

    猜你喜欢
    • 2017-07-24
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2020-06-24
    • 2017-08-06
    • 1970-01-01
    相关资源
    最近更新 更多