Eloquent get with query 不传递变量值

Eloquent get with query don't pass variable value

在我的 Slim 应用程序中,我使用的是 Eloquent 数据库。我建立了一个模型,我需要根据特定的用户 ID 通过课程。在我的控制器中,我使用

public function course($user_id, $request, $response) 
{

    $id = $response['user_id'];
    // return json_encode($user_id);

    $course = Course::with(['progress' => function ($query) {
        $query->where('user_id', '=', $id);
    }])->get();

    return json_encode($course);

}

但是这个有return这个错误

Notice: Undefined variable: id in line ...

但是如果我分配

$course = Course::with(['progress' => function ($query) {
            $query->where('user_id', '=', 2);
        }])->get();

它将return 完美的结果。 为什么我可以传递由 URL;

传递的变量数据

来自PHP manual

Closures may also inherit variables from the parent scope. Any such variables must be passed to the use language construct.

如果你想在匿名函数内部使用$id,你需要传递给它。它不会自动从父作用域继承变量。

public function course($user_id, $request, $response) 
{

    $id = $response['user_id'];
    // return json_encode($user_id);

    $course = Course::with(['progress' => function ($query) use ($id) {
        $query->where('user_id', '=', $id);
    }])->get();

    return json_encode($course);

}