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

时间:2013-06-13 10:26:01

标签: database transactions laravel eloquent

来自laravel文档:Database Transaction。 它说:

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

此处,明确输入1以更新用户... 我尝试使用变量

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

它会抛出错误:

Undefined variable: id

我还尝试将$ id作为参数放置:

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

仍然是一个错误:

  

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

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

3 个答案:

答案 0 :(得分:55)

use关键字是您所需要的:

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

答案 1 :(得分:13)

在PHP 7中语法已经改变:

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

答案 2 :(得分:1)

回答@CaptainHypertext的问题

  

如果在闭包内改变$ id,它会影响外面的$ id吗?

这种方法对我有用:

$id = 3;
$transactionResult = DB::transaction(function($id) use ($id) {
 $request_id = DB::table('requests')->insertGetId([
                          'company_id' => $company->$id,
                         ]);
return  $request_id ;
});

echo($transactionResult);