具有动态子句的Laravel Eloquent查询无法正常工作

时间:2016-03-11 11:52:01

标签: php laravel laravel-5 eloquent

我在Laravel中创建一个类,它使用包含变量来处理API请求。然后我根据传递给这个类的变量创建Eloquent模型查询。

这是我的代码:

class FilterVars
{
public static function filterProduct($vars, Product $product) {

    $product->where('id', '=', 1);

    if((array_key_exists('order_by', $vars)) && (array_key_exists('order', $vars))) {
        $product->orderBy($vars['order_by'], $vars['order']);
    }

    return $product->get();
}
}

当我使用postman:http://localhost:8931/api/v1/product?order_by=title&order=desc获取此URL时,这会返回结果很好,但我的where或order_by变量都没有被考虑在内。无论我在URl中传递什么,它都会返回所有内容。

奇怪的是,当我测试这段代码时,会返回正确的结果:

$product->where('id', '=', 1)->orderBy($vars['order_by'], $vars['order'])->get();

当所有方法调用链接在一起时,它可以工作。任何人都可以看到为什么我的第一个代码示例不起作用?

由于

1 个答案:

答案 0 :(得分:2)

基本上,当您在链接方法中调用方法时,它将返回$this实例本身。因此,如果要在不同的调用中使用它,则需要使用变量来存储$this

$product = $product->where('id', '=', 1);

if((array_key_exists('order_by', $vars)) && (array_key_exists('order', $vars))) {
    $product = $product->orderBy($vars['order_by'], $vars['order']);
}

return $product->get();