我使用了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.");