محمد شرف

المعاملات (Transactions) في قاعدة البيانات مع Zend Framework

متى يجب أن تنجح مجموعة تغييرات في قاعدة البيانات معًا أو تفشل معًا، وكيف تكتبها في Zend Framework 1.

· 1 دقائق قراءة

من الأرشيف: نُشر أصلًا على mohamedsharaf.net في أبريل 2012. أُعيدت كتابته ومراجعته في 2026، وبعض التفاصيل قد تكون قديمة.

معظم الاستعلامات لا تحتاج معاملة (Transaction). تحتاجها عندما يجب أن تحدث عدة تغييرات كلها معًا أو لا يحدث شيء منها: تحويل مال بين حسابين، حفظ طلب مع بنوده، تحديث المخزون مع عملية بيع.

في Zend Framework 1 (‏Zend_Db):

$db = Zend_Db_Table::getDefaultAdapter();
$db->beginTransaction();
try {
    $db->insert('orders', $order);
    $orderId = $db->lastInsertId();
    foreach ($lines as $line) {
        $db->insert('order_lines', $line + ['order_id' => $orderId]);
    }
    $db->commit();
} catch (Exception $e) {
    $db->rollBack();
    throw $e;
}

نقطتان للتحقق: يجب أن تستخدم جداولك محركًا يدعم المعاملات (InnoDB لا MyISAM القديم)، واجعل المعاملات قصيرة لأنها تحجز أقفالًا طوال تشغيلها.

اليوم: أصبح Zend Framework مشروع Laminas، وانتهى دعم Zend Framework 1 في 2016. لكن النمط نفسه (ابدأ، حاول، ثبّت، وتراجع عند الفشل) موجود في كل إطار حديث.

شاركWhatsAppLinkedInXTelegramFacebook