【问题标题】:Eloquent get with query don't pass variable value雄辩的查询不传递变量值
【发布时间】:2018-03-22 00:16:06
【问题描述】:

在 My Slim App 中,我使用的是 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);

}

但是这有返回这个错误

Notice: Undefined variable: id in line ...

但是如果我分配

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

它将返回完美的结果。 为什么我可以传递通过 URL 传递的可变数据;

【问题讨论】:

    标签: php laravel eloquent slim laravel-eloquent


    【解决方案1】:

    来自PHP manual

    闭包也可以从父作用域继承变量。任何此类变量都必须传递给use 语言结构。

    如果你想在匿名函数中使用$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);
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 2015-07-07
      • 2018-01-26
      • 2014-04-12
      • 2021-07-23
      相关资源
      最近更新 更多