yii 1.1 db transaction和auth extension

时间:2018-03-23 03:12:52

标签: php pdo yii transactions yii-extensions

我使用了yii auth extension(http://www.yiiframew...extension/auth/)并尝试实现数据库事务(CDbTransaction)。下面是我的代码,当我开发它并使用superadmin测试它时工作正常。

newInstance()

但是当我创建具有有限权限的其他用户时,此代码无法正常工作。交易不起作用,我无法理解为什么。我必须将提交移到上述位置才能使其正常工作。

public function actionUnpost($id) {
    if (Yii::app()->request->isPostRequest) {
        $model = $this->loadModel($id);
        $qtyCheck = array();

        $transaction = Yii::app()->db->beginTransaction(); // Transaction begin

        try {
            // If unpost this will resulting in negative remaining quantity, we should cancel this unpost!!!
            foreach ($model->formDetails as $detail) {

                if (isset($qtyCheck[$detail->id])) {
                    $qtyCheck[$detail->id] -= ($detail->quantity * $detail->type);
                } else {
                    $qtyCheck[$detail->id] = Journal::model()->getRemReceivingQty($detail->id, $detail->locationFk) - ($detail->quantity * $detail->type);
                }

                // remaining has normal balance positif, so check the remaining should not be less than 0
                if (0 > $qtyCheck[$detail->id]) {
                    throw new CDbException('Stok barang ' . $detail->item->name . ' menjadi negatif, FB tidak bisa diunposting!');
                }

                // Delete journal entries
                foreach ($detail->journalEntries as $entry) {
                    $entry->delete();
                }
            }

            $model->postingStatus = FormHeader::UNPOSTED;
            $model->save(false);

            $transaction->commit();
            Yii::app()->user->setFlash('success', "FB $model->headerNo telah berhasil diunposting.");
        } catch (Exception $e) {
            $transaction->rollBack();
            Yii::app()->user->setFlash('error', $e->getMessage());
        }

        $this->redirect(array('view', 'id' => $model->id));
    } else {
        throw new CHttpException(400, 'Invalid request. Please do not repeat this request again!');
    }
}

对我来说没有意义。使用底部代码,交易的目的将不会得到满足。

我使用mysql innodb作为表格,不应该是pdo或者任何问题,因为当用户是超级用户时它可以正常工作。

仅供参考,我也使用audittrail扩展(http://www.yiiframew...on/audittrail2/)。

对此有何帮助?

PS:ERROR消息 PDOException 没有活动交易

            $transaction->commit();

            $model->postingStatus = FormHeader::UNPOSTED;
            $model->save(false);

            Yii::app()->user->setFlash('success', "FB $model->headerNo telah berhasil diunposting.");

0 个答案:

没有答案