如何将参数传递给Laravel DB :: transaction()

Mel*_*vin 28 database transactions laravel eloquent

来自laravel文档:数据库事务.它说:

DB::transaction(function() {
    DB::table('users')->update(array('votes' => 1));
    DB::table('posts')->delete();
});
Run Code Online (Sandbox Code Playgroud)

在这里,明确输入1来更新用户......我试着使用变量,

$id = 3;
DB::transaction(function() {
    DB::table('users')->where('id','=',$id)->get();
});
Run Code Online (Sandbox Code Playgroud)

它抛出一个错误:

Undefined variable: id
Run Code Online (Sandbox Code Playgroud)

我也尝试将$ id作为参数放置如下:

$id = 3;
DB::transaction(function($id) {
    DB::table('users')->where('id', '=', $id)->get();
});
Run Code Online (Sandbox Code Playgroud)

仍然是一个错误:

类Illuminate\Database\MySqlConnection的对象无法转换为字符串

我做错了什么吗?请指教.谢谢...

Ale*_*ult 58

use关键字是你所需要的:

$id = 3;
DB::transaction(function($id) use ($id) {
    DB::table('users')->where('id', '=', $id)->get();
});
Run Code Online (Sandbox Code Playgroud)

  • 推荐讲座:[匿名函数:闭包和范围](http://www.php.net/manual/en/functions.anonymous.php) (8认同)
  • @CaptainHypertext不一定,如果你想改变外界的$ id,你可以参考它就像这样:'DB ::交易(函数($ id)的使用($ ID){` (2认同)

o.v*_*o.v 17

在PHP 7中,语法已更改:

$id = 3;
DB::transaction(function () use ($id) {
    DB::table('users')->where('id', '=', $id)->get();
});
Run Code Online (Sandbox Code Playgroud)