37

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

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 的对象无法转换为字符串

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

4

3 回答 3

78

use关键字是您需要的:

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

对于 PHP 7(未经测试,按以下答案的要求进行编辑):

$id = 3;
DB::transaction(function() use ($id) {
    DB::table('users')->where('id', '=', $id)->get();
});
于 2013-06-13T10:56:39.877 回答
20

在 PHP 7 中,语法发生了变化:

$id = 3;
DB::transaction(function () use ($id) {
    DB::table('users')->where('id', '=', $id)->get();
});
于 2018-02-19T11:31:41.230 回答
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);
于 2016-05-16T12:56:25.720 回答