marcj/optimistic-locking-behavior

There is no license information available for the latest version (dev-master) of this package.

A behavior allowing you to use optimistic locking in Propel 2.

dev-master 2015-01-08 12:06 UTC

This package is auto-updated.

Last update: 2024-12-11 00:38:30 UTC


README

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" />