Yii2支持MySQL行锁

扩展 · amoydavid · 于 6个月前 发布 · 957 次阅读

Yii2 的 ActiveQuery 默认不支持 MySQL 的行锁。于是扩展了一下。 欢迎来搞。

Yii2 Lockable ActiveQuery

This package allows you to use pessimistic locking (select for update) when you work with ActiveRecord Query.

Installation

The preferred way to install this extension is through composer.

Either run

php composer.phar require --prefer-dist amoydavid/yii2lockable-query "*"

or add

"amoydavid/yii2lockable-query": "*"

to the require section of your composer.json.

Usage

Set schema map for database connection

<?php
return [
    'class' => 'yii\db\Connection',
    'schemaMap' => [
        'mysql' => '\amoydavid\Yii2LockableQuery\mysql\Schema', // set up mysql 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

/**
 * Class Sample
 * @package common\models
 *
 */
class Sample extends \amoydavid\Yii2LockableQuery\ActiveRecord { ... }

Use model locks in transaction.

$dbTransaction = Yii::$app->db->beginTransaction();
try {
    $model = Sample::find()->where(['id'=>1])->forUpdate()->one();
    $dbTransaction->commit();
} catch(\Exception $e) {
    $dbTransaction->rollBack();
    throw $e;
}

Licence

MIT

Links

本帖已被设为精华帖!
共收到 0 条回复 MySQL
没有找到数据。
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册