Yii2 Lockable ActiveQuery
This package allows you to use pessimistic locking (select for update) when you work with ActiveRecord Query., (*1)
Installation
The preferred way to install this extension is through composer., (*2)
Either run, (*3)
php composer.phar require --prefer-dist amoydavid/yii2lockable-query "*"
or add, (*4)
"amoydavid/yii2lockable-query": "*"
to the require
section of your composer.json., (*5)
Usage
Set schema map for database connection, (*6)
<?php
return [
'class' => 'yii\db\Connection',
'schemaMap' => [
'mysql' => '\amoydavid\Yii2LockableQuery\mysql\Schema', // set up mysql schema
'mssql' => '\amoydavid\Yii2LockableQuery\mssql\Schema', // set up mssql schema
],
'dsn' => 'mysql:host=localhost;dbname=yii',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
// Schema cache options (for production environment)
//'enableSchemaCache' => true,
//'schemaCacheDuration' => 60,
//'schemaCache' => 'cache',
];
Extend your ActiveRecord class via \amoydavid\Yii2LockableQuery\ActiveRecord, (*7)
/**
* Class Sample
* @package common\models
*
*/
class Sample extends \amoydavid\Yii2LockableQuery\ActiveRecord { ... }
Use model locks in transaction., (*8)
$dbTransaction = $model->getDb()->beginTransaction();
try {
$model = Sample::find()->where(['id'=>1])->forUpdate()->one();
$dbTransaction->commit();
} catch(\Exception $e) {
$dbTransaction->rollBack();
throw $e;
}
Licence
MIT, (*9)
Links