A behavior allowing you to use optimistic locking in Propel 2
PHP
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
tests
.gitignore
.travis.yml
LICENSE
README.md
composer.json
composer.lock
phpunit.xml

README.md

OptimisticLockingBehavior

A behavior for Propel2 for optimistic locking.

Usage

<table name="user">
    <column name="id" required="true" primaryKey="true" autoIncrement="true" type="INTEGER" />
    <column name="username" type="VARCHAR" size="100" primaryString="true" />
    <behavior name="optimistic_locking" />
</table>

If you haven't installed this behavior through composer, you need to specify the full class name as behavior name:

    <behavior name="\MJS\OptimisticLocking\OptimisticLockingBehavior">

You can define a different locking columns. Default is version.

<behavior name="optimistic_locking" />
    <parameter name="version_column" value="locked_version"/>
</behavior>
$user = UserQuery::create()->findById($id);
$user->setUsername('Secret');

try {
    $user->save();
} catch (\MJS\OptimisticLocking\StaleObjectException $e) {
    //react on that case. Maybe show the edit form again with a hint
    //or reload $user and apply again your changes.
}

if (!$user->optimisticSave(){ 
    //whoops, there was someone faster.
}

Note for Versionable

This behavior is compatible to versionable-behavior. Make sure optimistic_locking behavior is loaded before versionable.

<behavior name="optimistic_locking" />
<behavior name="versionable" />