Install this plugin into your CakePHP application using composer:
composer require admad/cakephp-sequence
Then load the plugin by running CLI command:
./bin/cake plugin load ADmad/Sequence
SequenceBehavior
provided by this plugin maintains a contiguous sequence of
integers in a selected column, for records in a table (optionally with grouping)
when adding, editing (including moving groups) or deleting records.
Add the SequenceBehavior
for your table and viola:
$this->addBehavior('ADmad/Sequence.Sequence');
You can customize various options as shown:
$this->addBehavior('ADmad/Sequence.Sequence', [
'sequenceField' => 'position', // Field to use to store integer sequence. Default "position".
'scope' => ['group_id'], // Array of field names to use for grouping records. Default [].
'startAt' => 1, // Initial value for sequence. Default 1.
]);
Now whenever a new record is added its position
field will be automatically
set to current largest value in sequence plus one.
When editing records you can set the position to a new value and the position of other records in the list will be automatically updated to maintain proper sequence.
When doing a find on the table an order clause is automatically added to the query to order by the position field if an order clause has not already been set.
Move up record by one position:
$modelObject->moveUp($entity);
Move down record by one position:
$modelObject->moveDown($entity);
Set order for list of records provided. Records can be provided as array of
entities or array of associative arrays like [['id' => 1], ['id' => 2]]
or
array of primary key values like [1, 2]
.
Shout out to @neilcrookes for his wonderful Sequence Behavior for CakePHP 1.3 which was the inspiration for this plugin.