gpt4 book ai didi

php - Laravel 过滤已从 mysql 检索到的结果

转载 作者:行者123 更新时间:2023-11-29 07:49:21 26 4
gpt4 key购买 nike

我正在使用以下方法从数据库中提取所有供应商:

$q = Input::get('filter');
$Supplier = new Supplier;
$data = $Supplier->where('name', 'LIKE', '%'.$q['filters'][0]['value'].'%')->get();

然后,我希望用户能够进一步过滤,但不必为他们应用的每个过滤器再次查询数据库。

例如,在查询返回的数据中,其中一列是supplier_type_id。在 UI 中,用户能够过滤按供应商类型(例如,供应商类型)带回的供应商。勾选食品供应商旁边的一个框,它会在不接触数据库的情况下进一步过滤结果。

所以我真的想过滤从 Laravel 返回的 $data 对象。

我该怎么做?

最佳答案

如果您想在查询数据库的请求结束后过滤集合,那么这就是您应该在客户端处理的问题。

变量$data仅在服务器端可用。要将数据从一个请求持久保存到服务器上的另一个请求,您必须将其存储在当前 session 中(使用 Session::put()Session::get() code>) 或以某种方式缓存它。在大多数情况下这并不是很好,因为对数据库的任何更改都会导致存储数据和 session 数据之间的不一致。

在不接触数据库的情况下处理此问题的最佳解决方案是发送数据(可能采用 JSON 格式),然后使用 JavaScript 处理 UI 内的任何其他过滤。

编辑

可以使用 remember 方法将查询结果缓存指定的时间:

$data = $Supplier->where('name', 'LIKE', '%'.$q['filters'][0]['value'].'%')->remember(60)->get();

在上面的示例中,查询结果将缓存一小时,因此该小时内的任何请求都将从缓存中获取数据,而不是从数据库中获取数据。你可以看到Caching QueriesCache configuration and usage Laravel 文档以获取更多信息。

然后,您可以使用 filter 闭包进一步过滤缓存的集合:

$supplierTypeId = Input::get('supplier_type_id');

$data = $data->filter(function($item) use ($supplierTypeId)
{
return $item->supplier_type_id == $supplierTypeId;
});

关于php - Laravel 过滤已从 mysql 检索到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26868268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com