在 laravel 的 DB::transaction 中,为外部变量赋值

更新日期: 2018-07-30 阅读次数: 885 分类: Laravel

例如,我想在 laravel 的事务中,对某个外部变量赋值,然后在后续的逻辑中判断该变量的属性

$user = null;  // init

DB::transaction(function() use($user) {
	// do something with user
});

// check user
if ($user->name) {
	// bla, bla
}

这样会报错

Trying to get property of non-object at

也就是说,在 PHP 中,即使是对象也不会默认采用引用的方式传参。

需要修改为

DB::transaction(function() use(&$user) {
	// do something with user
});

// check user

果然,我还是个 PHP 初学者。。。

参考

https://stackoverflow.com/questions/31059540/laravel-get-variable-from-a-db-transaction-closure

谈笑风生

foo

/** @test */
    public function test_transactio(){
        $user = create(User::class);

        \DB::transaction(function() use($user) {
            $user->name = 'foo';
        });

        $this->assertEquals($user->name, 'foo');
    }

测试成功啊!

爱评论不评论

近期节日

2018年10月22日 世界传统医药日
2018年10月23日 霜降
2018年10月24日 联合国日
2018年10月31日 世界勤俭日
2018年11月01日 万圣节
2018年11月07日 立冬
2018年11月08日 中国记者日
2018年11月10日 世界青年节
2018年11月11日 光棍节
2018年11月14日 世界糖尿病日
2018年11月17日 国际大学生节
2018年11月20日 国际儿童日
查看更多节日