Laravel DB::transaction 不接受变量

Laravel DB::transaction not accepting variables

你好,我有一些我无法捕捉到的错误,我正在尝试在我的项目中实现 DB::transaction(),我有 3 个表我必须插入数据,我创建了我的自己的功能来做到这一点,但我想重构我的代码以使用 laravel DB::transaction()。 我浏览了文档 Laravel docs,但出现错误,错误是它没有看到我在事务中的函数内部传递的变量

'introduction' => $request->introduction,

我得到了**未定义的变量'request' 下面是我的完整功能

  public function store(Request $request)
    {
        $data = $request->all();

        $validator = Validator::make($data, [
            'name' => 'required|max:255',
            'introduction' => 'required|max:255',
            'budget' => 'required'
        ]);

        if ($validator->fails()) {
            return response(['error' => $validator->errors(), 'Validation Error']);
        }

        $id = Auth::id();

        // $project = Project::create($data);


        DB::transaction(function () {
            $project = Project::create([
                'name' => $request->name,
                'introduction' => $request->introduction,
                'budget' => $request->budget

            ]);
            DB::table('approvals')->insert(['project_id' => $project->id]);
            DB::table('agreements')->insert(['project_id' => $project->id]);
        });
    }

如何将 $request->name 传递给函数, 提前谢谢你

您可以在函数中使用 use,如下所示:

DB::transaction(function () use($request) {
    $project = Project::create([
        'name' => $request->name,
        'introduction' => $request->introduction,
        'budget' => $request->budget

    ]);
    DB::table('approvals')->insert(['project_id' => $project->id]);
    DB::table('agreements')->insert(['project_id' => $project->id]);
});