【问题标题】:How to retrieve value created inside transaction and return it outside transaction in Laravel?如何在 Laravel 中检索事务内部创建的值并将其返回到事务外部?
【发布时间】:2016-03-04 10:57:45
【问题描述】:

我正在开发一个 Laravel 项目。我正在使用 Laravel 5.2。我正在使用数据库,并且一次处理多个查询。所以我使用的是 Laravel 内置的数据库事务功能。但我的问题是我无法检索数据库中最后插入的 id 之类的值并返回它。

这就是我使用事务的方式

$item_code = "";
$id = "";
DB::transaction(function() use ($item_code,$name,$id){
       $item_code = $this->generateItemCode();
       $item = new Item;
       $item->name = $name;
       $item->save();
       $id = $item->id;
})

echo $item_code;
echo $id;

在我的代码中,当我打印出 $item_code 和 $id 时。两者都是空的。我怎样才能实现它?

【问题讨论】:

    标签: php transactions laravel-5.2


    【解决方案1】:

    您有几个选择。您可以通过引用将$item_code$id 传递到闭包中(注意& 符号)

    DB::transaction(function() use (&$item_code, $name, &$id){
        $item_code = $this->generateItemCode();
        $item = new Item;
        $item->name = $name;
        $item->save();
        $id = $item->id;
    });
    

    或者你可以从交易中返回$item

    $item = DB::transaction(function() use ($item_code,$name,$id){
        $item = new Item;
        $item->name = $name;
        $item->save();
    
        return $item;
    });
    

    【讨论】:

    • 谢谢。通过参考传递是有效的。但是从事务内部返回是行不通的。请从交易部分内部删除退货。因为我想赞成你的回答。
    • 为我传递参考工作。最后我明白了如何使用通过引用传递。谢谢
    猜你喜欢
    • 2014-07-17
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多