gpt4 book ai didi

php - 使用 Eloquent ORM 执行 MYSQL 事务

转载 作者:行者123 更新时间:2023-11-29 03:18:59 25 4
gpt4 key购买 nike

几周前我有一个 interesting inquiry关于库存/支付系统的处理/处理,我决定实现已接受答案的方法,因为它既是最简单的,也可能是给出的最有效的解决方案。

我正在使用 Laravel 的 Eloquent ORM结合Slim Framework ,并且我想执行一个 MYSQL transaction,其中包含一个关于库存系统中元素库存减少的特定查询。我想使用 transaction 的代码如下:

    // decrement each items stock following successful payment
try {
// here is where i'd like to perform a transaction, rather than simple eloquent query
foreach ($this->c->basket->all() as $product) {
$product->decrement('stock', $product->quantity);
}
} catch (Exception $e) {

// if error is caused during decremention of item(s),
// handle accordingly

}

既然我如上所述使用 Slim,我相信我没有对 Laravel DB Facade 的 native 访问权限。据我所知处理交易。

建议?

旁注

我的数据库连接是在一个初始化文件中全局设置的,如下所示:

$capsule = new Illuminate\Database\Capsule\Manager();

$capsule->addConnection($container['settings']['db']);

$capsule->setAsGlobal();

$capsule->bootEloquent();

最佳答案

您可以从 slim 容器中获取 Capsule 对象,然后仅使用 Connection 对象来启动和提交数据库事务。如果发生异常,您只需调用 rollBack() 方法即可。

伪代码:

$capsule = new \Illuminate\Database\Capsule\Manager();

// Get a registered connection instance.
$connection = $capsule->getConnection();

// begin a transaction manually
$connection->beginTransaction();

try {
// do something...
$product->decrement('stock', $product->quantity);

// commit a transaction via the commit method
$connection->commit();
} catch (Exception $e) {
// you can rollback the transaction via the rollBack method
$connection->rollBack();
}

关于php - 使用 Eloquent ORM 执行 MYSQL 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48493111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com