Symfony\Component\HttpFoundation\ParameterBag类的对象无法转换为字符串

5

受影响的Symfony版本: ~4.0

描述 我正在使用laravel(5.6.*)并编写以下简单的eloquent查询。

$query = "something";
$products = Product::
where('title', $query)
->paginate($limit);

但是我得到了“无法将Symfony\Component\HttpFoundation\ParameterBag类的对象转换为字符串”的错误。

昨天它工作得非常完美,但今天我不知道发生了什么。 请帮助我解决这个问题。 我正在使用该查询提供简单的搜索功能。

请查看屏幕截图以获取更多信息。 enter image description here

更新

请查看新代码,但仍然没有运气。

function get(Request $request) {
        $limit = 10;
        $query = "";
        if ($request->has('limit')) {
            $limit = $request->limit;
        }
        if ($request->has('query')) {
            $query = $request->query;
        }

        $products = Product::
                where('title','like', '%'.$query.'%')
                ->orWhere('variant_title', 'like', '%'.$query.'%')
                ->orWhere('variant_sku', 'like', '%'.$query.'%')
                ->orWhere('tags', 'like', '%'.$query.'%')
                ->paginate($limit);


        $products = $products->withPath('/products');
        return $products;
    }

你的 where 函数不应该长成这样吗:where('title', '=', $query) - Jason Roman
2个回答

22

哦,经过长时间的调试,我终于发现了以下问题:
您不能将“query”键用于请求,因为它已在软件包中使用。

我觉得他们应该在类中提到他们使用的参数。

因此,最终代码将像这样。

function get(Request $request) {
    $limit = 10;
    $str = "";
    if ($request->has('limit')) {
        $limit = $request->limit;
    }
    if ($request->has('str')) {
        $str = $request->str;
    }

    $products = Product::
            where('title','like', '%'.$str.'%')
            ->orWhere('variant_title', 'like', '%'.$str.'%')
            ->orWhere('variant_sku', 'like', '%'.$str.'%')
            ->orWhere('tags', 'like', '%'.$str.'%')
            ->paginate($limit);


    $products = $products->withPath('/products');
    return $products;
}

我敢打赌,这个查询现在容易受到SQL注入攻击。你应该使用预编译语句 - https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/query-builder.html#binding-parameters-to-your-query - dmnptr

2

看起来你的$query不是一个字符串,而是Symfony\Component\HttpFoundation\ParameterBag类的对象。它来自于Request吗?试着从中获取值,像这样:

$queryValue = $query->get('value_field_name');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接