来自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的对象无法转换为字符串
我做错了什么吗?请指教。感谢...
答案 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);