Skip to content

Commit

Permalink
feat: Add getOrder method with dynamic column support and tests
Browse files Browse the repository at this point in the history
- Implemented `getOrder()` method to fetch order value from a dynamically determined column, enhancing flexibility in model configuration.
- Added tests to validate the `getOrder()` functionality.
- Updated PHPDoc for `getOrder()` to clearly explain the method's behavior and its dynamic column determination.

This update ensures that the model can handle varying order columns, catering to different sorting configurations seamlessly.
  • Loading branch information
YazeedAlsaif committed Jun 1, 2024
1 parent 545d096 commit 6b16af6
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/SortableTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,21 @@ public function getLowestOrderNumber(): int
return (int) $this->buildSortQuery()->min($this->determineOrderColumnName());
}

/**
* Get the order value from a dynamically determined column.
*
* This method returns the model's order value from the column specified by `determineOrderColumnName`.
* It allows for flexibility in specifying the order column in different model configurations.
*
* @return int The value of the order column.
*/
public function getOrder() : int
{
$orderColumnName = $this->determineOrderColumnName();

return $this->$orderColumnName;
}

public function scopeOrdered(Builder $query, string $direction = 'asc')
{
return $query->orderBy($this->determineOrderColumnName(), $direction);
Expand Down
32 changes: 32 additions & 0 deletions tests/SortableTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
namespace Spatie\EloquentSortable\Test;

use Illuminate\Support\Collection;
use Spatie\EloquentSortable\Sortable;
use Spatie\EloquentSortable\SortableTrait;

class SortableTest extends TestCase
{
Expand Down Expand Up @@ -423,4 +425,34 @@ public function it_can_tell_if_element_is_last_in_order()
$this->assertTrue($model[$model->count() - 1]->isLastInOrder());
$this->assertFalse($model[$model->count() - 2]->isLastInOrder());
}

/** @test */
public function it_can_determine_custom_column_and_get_order_number()
{
$model = Dummy::first();

$this->assertEquals($model->getOrder(), 1);

$model = new class () extends Dummy {
public $sortable = [
'order_column_name' => 'my_custom_order_column',
];
};

$this->assertEquals($model->determineOrderColumnName(), 'my_custom_order_column');

$model->my_custom_order_column = 2;

$this->assertEquals($model->getOrder(), 2);

$model = new class () extends Dummy {
public $sortable = [
'order_column_name' => 'my_other_custom_order_column',
];
};

$model->my_other_custom_order_column = 3;

$this->assertEquals($model->getOrder(), 3);
}
}

0 comments on commit 6b16af6

Please sign in to comment.