Laravel控制器变量

时间:2014-05-03 17:29:17

标签: php laravel

几天前我开始学习Laravel。 现在我的控制器中的变量有问题,我总是得到这个错误:"未定义的变量:server_id"。

我的路线文件如下:

Route::get('servers/{server_id}','ServersController@show');

相关控制器中的动作方法:

public function show($server_id)
{
    $details = Server::with(array('details' => function($query)
    {
        $query->where('server_id', '=', $server_id);

    }))->get();

    return View::make('servers.show')->with('details', $details);
}

我可以使用var。函数中的$ server_id并将其传递给视图。但我不能在数据库查询的where子句中使用它。

我希望有人能解释我的问题是什么,以及如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

Model::with()方法意味着当您实例化模型的对象时,还会同时加载其他一些集合。这对于避免不必要的数据库调用很有用。

我无法确定您的代码,但看起来您想要找到ID为$ server_id的服务器,而不是加载其他一些东西。如果这是正确的,您可以大大清理代码,如下所示:

public function show($server_id)
{
    $details = Server::find($server_id);
    return View::make('servers.show')->with('details', $details);
}

答案 1 :(得分:0)

您正在使用闭包并且它具有不同的范围,您应该使用 use 关键字将$ server_id变量传递给它。

PHP文档说:

  

闭包还可以从父作用域继承变量。必须将任何此类变量传递给use语言构造。从父作用域继承变量与使用全局变量不同。全局变量存在于全局范围内,无论执行什么功能,它都是相同的。闭包的父作用域是声明闭包的函数(不一定是从中调用它的函数)。

Read more about Anonymous functions

public function show($server_id)
{
    $details = Server::with(array('details' => function($query) use ($server_id)
        {
            $query->where('server_id', '=', $server_id);
        }))->get();

    return View::make('servers.show')->with('details', $details);
}