【问题标题】:Undefined variable in fluent query builder流畅的查询生成器中的未定义变量
【发布时间】:2012-10-25 08:34:50
【问题描述】:

我开始使用 Laravel 框架,但我在使用 fluent 查询生成器时遇到了问题。在 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”,它包含值。

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

【问题讨论】:

    标签: mysql fluent laravel


    【解决方案1】:

    感谢@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();
    

    【讨论】:

      【解决方案2】:

      您在变量上苦苦挣扎的原因是它超出了匿名函数的范围。

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

      【讨论】:

      • 谢谢你的回复.. 是的。仅使用“输入”类方法就足够了。但我使用 PHP 的“使用”功能来解决这个问题。像 Listing::where(function($query) use($pt){..})
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      相关资源
      最近更新 更多