php - Laravel Nova sort on Eloquent Accessor Attributes

one text

EDIT : added code inside the accessor as requested

Is it possible to sort Eloquent Accessor values in Laravel Nova ?

https://laravel.com/docs/6.x/eloquent-mutators#defining-an-accessor

I have found this thread on Github, but nobody gave a proper response to the OP : https://github.com/laravel/nova-issues/issues/85

Laravel 6.17.1
Nova 2.12

For exemple, my model :

class Job extends Model
{
    public function getWithRedirectedApplicationsCountAttribute(): int
    {
        $appStat = $this->publicationStatistics()->sum('applies');
        $appInternal = $this->with_archived_applications_count;

        return max($appStat, $appInternal);
    }

    public function publicationStatistics(): HasMany
    {
        return $this->hasMany(JobOnJobboard::class, 'offer_id', 'id');
    }

    public function getWithArchivedApplicationsCountAttribute(): int
    {
        return $this->applications->count();
    }
}

My Nova Resource :

class Job extends Resource
{
    public function fields(Request $request): array
    {
       return [
           Number::make('Total Number of applications', 'with_redirected_applications_count')->sortable(),
       ];
    }
}

But when I try to sort on "Total Number of applications" I get error :

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'with_redirected_applications_count' in 'order clause' (SQL: select * from `offers` where `offers`.`deleted_at` is null order by `with_redirected_applications_count` asc limit 11 offset 0)

I understand that with_redirected_applications_count is not a valid SQL column, and therefore Eloquent cannot sort on it.

I am just wondering if there is a workaround.

Thanks !

Source