我在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();
当所有方法调用链接在一起时,它可以工作。任何人都可以看到为什么我的第一个代码示例不起作用?
由于
答案 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();