流畅的查询构建器中的未定义变量

时间:2012-11-05 13:38:55

标签: mysql fluent laravel

我开始使用Laravel框架,我对流畅的查询构建器有疑问。在where条件中,如果我使用的是原始值或Input::get(),它会检索结果并正确执行,但是当我使用指定的变量时,它会显示“未定义的变量”错误。

$properties = Listing::where(function($query)
{
    if (Input::has('property-type')) $query->where('property_type', '=',Input::get('property-type'));
})->get();

它可以正常工作,但如果我这样做

$pt=Input::get('property-type');
$properties = Listing::where(function($query)
{
    if ($pt!='') $query->where('property_type', '=',$pt);
})->get();

它返回错误

Undefined variable: pt

如果我打印变量“$ pt”,则它包含值。

我想只使用变量值,因为我应该将这些值从控制器传递给模型作为参数,并在模型函数中构建查询。难道我做错了什么?在查询执行之前是否未分配变量?请问,任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

感谢@viji评论,您可以使用php use关键字

来完成
$var = 5;
$orgs = app('db')->table('t')
        ->where('status', '=', '1')
        // Sending $var to anonymous function
        ->where(function ($query) use ($var) {
            $query->where('orgs.name', 'like', "%$var%");
        })->select('id')
        ->get();

答案 1 :(得分:0)

你正在努力使用变量是因为它超出了匿名函数的范围。

我不担心将变量传递给模型来构造查询,只需使用真棒Input类方法。