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