PHPackages                             dmitrychurkin/nova-sortable - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. dmitrychurkin/nova-sortable

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

dmitrychurkin/nova-sortable
===========================

This Laravel Nova package allows you to reorder models in a Nova resource's index view using drag &amp; drop.

4.0.2(10mo ago)0749[1 issues](https://github.com/dmitrychurkin/nova-sortable/issues)MITPHPPHP &gt;=8.1

Since Jun 30Pushed 10mo agoCompare

[ Source](https://github.com/dmitrychurkin/nova-sortable)[ Packagist](https://packagist.org/packages/dmitrychurkin/nova-sortable)[ GitHub Sponsors](https://github.com/outl1ne)[ RSS](/packages/dmitrychurkin-nova-sortable/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (4)Versions (3)Used By (0)

Nova Sortable
=============

[](#nova-sortable)

[![Latest Version on Packagist](https://camo.githubusercontent.com/93540606e997f54af00cd279bcf51fe280921462eeb09e99be440e2e39c2e8ff/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6f75746c316e652f6e6f76612d736f727461626c652e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/outl1ne/nova-sortable)[![Total Downloads](https://camo.githubusercontent.com/155895a63103e6500fe00ab24d6725b355e10fdfa39f160161f755bdce7e21a0/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6f75746c316e652f6e6f76612d736f727461626c652e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/outl1ne/nova-sortable)

This [Laravel Nova](https://nova.laravel.com) package allows you to reorder models in a Nova resource's index view using drag &amp; drop.

Uses Spatie's [eloquent-sortable](https://github.com/spatie/eloquent-sortable) under the hood.

Requirements
------------

[](#requirements)

- `php: >=8.1`
- `laravel/nova: ^5.0`

Features
--------

[](#features)

- Drag &amp; drop reorder (on either Index view or HasMany view)
- BelongsTo/MorphsTo reorder support w/ pivot tables
- Move to start and end arrows (makes item first/last)
- Everything from [eloquent-sortable](https://github.com/spatie/eloquent-sortable)
- Localization

Screenshots
-----------

[](#screenshots)

[![Sortable](./docs/sortable.gif)](./docs/sortable.gif)

Installation
------------

[](#installation)

Install the package in a Laravel Nova project via Composer:

```
# Install package
composer require dmitrychurkin/nova-sortable
```

Usage
-----

[](#usage)

### Create migration

[](#create-migration)

Add an order field to the model using Laravel migrations:

```
// Add order column to the model
Schema::table('some_model', function (Blueprint $table) {
  $table->integer('sort_order');
});

// Set default sort order (just copy ID to sort order)
DB::statement('UPDATE some_model SET sort_order = id');
```

### Implement eloquent-sortable

[](#implement-eloquent-sortable)

Implement the Spatie's `eloquent-sortable` interface and apply the trait:

```
use Spatie\EloquentSortable\Sortable;
use Spatie\EloquentSortable\SortableTrait;

class SomeModel extends Eloquent implements Sortable
{
  use SortableTrait;

  public $sortable = [
    'order_column_name' => 'sort_order',
    'sort_when_creating' => true,
  ];

  ...
}
```

When the model does not have a sortable configuration, the default eloquent-sortable configuration will be used.

### Apply HasSortableRows to Nova resource

[](#apply-hassortablerows-to-nova-resource)

Apply `HasSortableRows` trait from this package on the Resource:

```
use Outl1ne\NovaSortable\Traits\HasSortableRows;

class MyResource extends Resource
{
  use HasSortableRows;

  ...
}
```

NB! This overrides the `indexQuery()` method.

### Disallowing sorting on a per-request/resource basis

[](#disallowing-sorting-on-a-per-requestresource-basis)

You can disable sorting on a per-request or per-resource basis by overriding the `canSort()` on the Resource method like so:

```
public static function canSort(NovaRequest $request, $resource)
{
  // Do whatever here, ie:
  // return user()->isAdmin();
  // return $resource->id !== 5;
  return true;
}
```

NB! This requires you to disable caching (see below).

### Disabling caching

[](#disabling-caching)

If you want to disable caching due to using `canSort` or running tests, you can set `sortableCacheEnabled` to false on the resource that has the `HasSortableRows` trait. See the example below:

```
class Artist extends Resource
{
    use HasSortableRows;

    public static $sortableCacheEnabled = false;
}
```

Or if you want to temporarily disable sortability cache (for tests), you can call `Resource::disableSortabilityCache()` on the resource.

Custom sortable options
-----------------------

[](#custom-sortable-options)

### Nova sorting order

[](#nova-sorting-order)

To sort your resource in a different order in Nova, you can set the `nova_order_by` flag to `DESC` (`ASC` by default) in the `$sortable` array.

```
class SomeModel extends Eloquent implements Sortable
{
  use SortableTrait;

  public $sortable = [
    'order_column_name' => 'sort_order',
    'sort_when_creating' => true,
    'nova_order_by' => 'DESC',
  ];

  ...
}
```

### Ignoring policies

[](#ignoring-policies)

If you have a resource that has `authorizedToUpdate` false, but you want the user to still be able to sort it, you can use the `ignore_policies` flag like so:

```
class SomeModel extends Eloquent implements Sortable
{
  use SortableTrait;

  public $sortable = [
    'order_column_name' => 'sort_order',
    'sort_when_creating' => true,
    'ignore_policies' => true,
  ];

  ...
}
```

Sorting on HasMany relationship
-------------------------------

[](#sorting-on-hasmany-relationship)

**NB!** The resource can only be sorted on **either** the Index view **or** the HasMany list view, but not both!

Sorting on HasMany is simple. Add `'sort_on_has_many' => true` to the `$sortable` array on the model. Like so:

```
public $sortable = [
  'order_column_name' => 'sort_order',
  'sort_when_creating' => true,
  'sort_on_has_many' => true,
];
```

The sort on has many configuration can be apply in a per model basis or it can be added in the eloquent-sortable configuration for all the models.

```
return [

    // Spatie sortable configuration

    /**
     * Add sort on has many in all the models.
     **/
    'sort_on_has_many' => true,
];
```

Sorting on ManyToMany relationships
-----------------------------------

[](#sorting-on-manytomany-relationships)

Sorting on BelongsToMany and MorphToMany relationships is available, but requires special steps.

See the documentation here: [Sorting ManyToMany relationships (w/ pivot table)](docs/sorting/many-to-many.md).

Localization
------------

[](#localization)

The translation file(s) can be published by using the following publish command:

```
php artisan vendor:publish --provider="Outl1ne\NovaSortable\ToolServiceProvider" --tag="translations"
```

You can add your translations to `resources/lang/vendor/nova-sortable/` by creating a new translations file with the locale name (ie `et.json`) and copying the JSON from the existing `en.json`.

Other usecases
--------------

[](#other-usecases)

### Using indexQuery

[](#using-indexquery)

This package overwrites the `indexQuery` of the Resource and if you still want to use it, you can do it as follows:

```
use HasSortableRows {
    indexQuery as indexSortableQuery;
}

public static function indexQuery(NovaRequest $request, $query)
{
  // Do whatever with the query
  // ie $query->withCount(['children', 'descendants', 'modules']);
  return parent::indexQuery($request, static::indexSortableQuery($request, $query));
}
```

Credits
-------

[](#credits)

- [Tarvo Reinpalu](https://github.com/Tarpsvo)

License
-------

[](#license)

Nova Sortable is open-sourced software licensed under the [MIT license](LICENSE.md).

###  Health Score

32

—

LowBetter than 72% of packages

Maintenance54

Moderate activity, may be stable

Popularity13

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

322d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/a9fe3ea2e0796a49d755b82987b4ce851247513cab1a8123546c8b7480f3cb3f?d=identicon)[dmitrychurkin](/maintainers/dmitrychurkin)

---

Top Contributors

[![dmitrychurkin](https://avatars.githubusercontent.com/u/25079859?v=4)](https://github.com/dmitrychurkin "dmitrychurkin (3 commits)")

---

Tags

laravelnovaoptimistdigitaleloquent-sortabledmitrychurkin

### Embed Badge

![Health badge](/badges/dmitrychurkin-nova-sortable/health.svg)

```
[![Health](https://phpackages.com/badges/dmitrychurkin-nova-sortable/health.svg)](https://phpackages.com/packages/dmitrychurkin-nova-sortable)
```

###  Alternatives

[optimistdigital/nova-sortable

This Laravel Nova package allows you to reorder models in a Nova resource's index view using drag &amp; drop.

2872.1M6](/packages/optimistdigital-nova-sortable)[outl1ne/nova-sortable

This Laravel Nova package allows you to reorder models in a Nova resource's index view using drag &amp; drop.

2861.8M9](/packages/outl1ne-nova-sortable)[optimistdigital/nova-multiselect-field

A multiple select field for Laravel Nova.

3403.5M7](/packages/optimistdigital-nova-multiselect-field)[outl1ne/nova-menu-builder

This Laravel Nova package allows you to create and manage menus and menu items.

243246.0k3](/packages/outl1ne-nova-menu-builder)[sbine/route-viewer

A Laravel Nova tool to view your registered routes.

57215.9k](/packages/sbine-route-viewer)[optimistdigital/nova-notes-field

This Laravel Nova package adds a notes field to Nova's arsenal of fields.

52139.5k](/packages/optimistdigital-nova-notes-field)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
