Skip to content

SoftDeletes filter not constrained in Metric when table is filtered #5528

@kichetof

Description

@kichetof
  • Laravel Version: 10.10.0
  • Nova Version: 4.24.2
  • PHP Version: 8.2.4

Description:

When you filter a table with soft deletes (only deleted or with deleted), table is correctly filtered but not metrics.
Metric values are totally useless when filtered by delete status

I tried with 2 metrics, Trend and Partition, same issue.
In my partition metric, I need to manually return results and need to perform adequate queries. This is how I discovered it.

Detailed steps to reproduce the issue on a fresh Nova installation:

Register Metrics with ByStatus::make()->refreshWhenFiltersChange()

Create a Metric and filter table by Soft delete status.


This is my custom Metric result, same issue

<?php

namespace App\Nova\Metrics;

use App\Models\Product;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\DB;
use Laravel\Nova\FilterDecoder;
use Laravel\Nova\Http\Requests\NovaRequest;
use Laravel\Nova\Metrics\Partition;

class ByStatus extends Partition
{
    /**
     * Calculate the value of the metric.
     *
     * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
     * @return mixed
     */
    public function calculate(NovaRequest $request)
    {
        ray((new FilterDecoder($request->filter, $this->filters))->filters());
        // FilterDecoder doesn't have SoftDeletes constrained filter
        
       // onlyActive and onlyInactive are local scopes with queries by dates and some intern logic as I don't have a column to perform it by default
        return $this->result([
            'Active' => Product::onlyActive()->tap(function ($query) use ($request) {
                return $this->applyFilterQuery($request, $query);
            })->ray()->count(),
            'Inactive' => Product::onlyInactive()->tap(function ($query) use ($request) {
                return $this->applyFilterQuery($request, $query);
            })->count(),
        ]);
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions