具有可选参数的Laravel雄辩查询

具有可选参数的Laravel雄辩查询,laravel,eloquent,Laravel,Eloquent,我正在尝试了解是否有一种简单的方法可以将可变数量的参数以雄辩的方式传递给查询,希望使用数组 从我所能找到的情况来看,似乎没有一种方法可以不通过输入循环查看请求中设置了什么 示例如下: 这会起作用,但我觉得它的复杂性/不雅观不是拉维 我就在这里,这可能是不可能的,只是希望其他人解决了类似的问题: $where = array("user_id" => 123, "status" => 0, "something else" => "some value"); $

我正在尝试了解是否有一种简单的方法可以将可变数量的参数以雄辩的方式传递给查询,希望使用
数组

从我所能找到的情况来看,似乎没有一种方法可以不通过
输入循环查看请求中设置了什么

示例如下:

这会起作用,但我觉得它的复杂性/不雅观不是拉维

我就在这里,这可能是不可能的,只是希望其他人解决了类似的问题:

$where = array("user_id" => 123, "status" => 0, "something else" => "some value");

        $orders = Order::where($where)->get()->toArray();
        return Response::json(array(
                'orders' => $orders
                ),
            200
        );
返回一个错误。
strtolower()当然希望参数1是字符串,数组给定。


这可能吗?

Order::where实际返回查询生成器的实例,因此这可能比您想象的要简单。如果您只想获取query builder的实例并一次“构建”一个where()查询,您可以这样获得它:

$qb = (new Order)->newQuery();
foreach ($searchParams as $k => $v) {
    $qb->where($k, $v);
}
return $qb->get(); // <-- fetch your results
这将向您显示结果查询的外观;这在使用雄辩游戏时非常有用。

您可以尝试以下方法:

方法1:

如果输入中接收到一个可选的搜索参数

$orders = Order::select('order_id','order_value',...other columns);

if($request->has(user_id)) {
   $orders->where('orders.user_id','=',$request->user_id);
}

//considering something_else as a substring that needs to be searched in orders table
if($request->has('something_else')) {
    $orders->where('orders.column_name', 'LIKE', '%'.$request->something_else.'%');
}

$orders->paginate(10);
方法2:

如果输入中有多个可选参数

$orders = Order::select('columns');
foreach($input_parameters as $key => $value) {
    //this will return results for column_name=value
    $orders->where($key, $value);//key should be same as the column_name

    //if you need to make some comparison
    $orders->where($key, '>=', $value);//key should be same as the column_name
}
return $orders->paginate(15);

谢谢你的回答。我可以看出这是可能的,我希望通过传递一个
数组来一次性完成。但这也提供了信息,因为我不知道您可以完成
(新订单)
部分。也是一支非常棒的乐队。我可以肯定这确实管用。如果没有其他人有一点神奇的答案,我会记下这个。哈哈。我这样做是因为Model->newQuery()为模型的表获得了一个新的查询生成器……它很容易阅读,而且我不相信有静态等价物。无论哪种方式,Builder都使用“Builder模式”——关键字是Builder。“工厂”的关键词就像你说的“一枪”。我不知道在拉雷维尔有查询工厂,但也许我错了。这是无价的信息。你赢了。嗯,你并没有得到太多的竞争。我也不知道的那件事。我越是远离PHP,我就越喜欢Laravel。那家伙真的做了些好事。你从哪里了解的
(新型号)->newQuery()
?我在文档中没有看到任何类似的东西,每当我问一个拉威尔问题,我都会得到一些我以前从未见过的东西。
$orders = Order::select('columns');
foreach($input_parameters as $key => $value) {
    //this will return results for column_name=value
    $orders->where($key, $value);//key should be same as the column_name

    //if you need to make some comparison
    $orders->where($key, '>=', $value);//key should be same as the column_name
}
return $orders->paginate(15);