首页 > 解决方案 > PHP/Laravel 中数组的 ->where() 替代方案

问题描述

我创建了一个从 Teamwork Desk API 获取所有票证的函数。我想按创建日期过滤出票,但不能在数组上使用 ->where() 。有替代方案吗?

就像我在尝试 ->where() 之前所说的那样,谷歌搜索对我没有帮助。

class ApiController extends Controller
{
public function getTickets() {
    $client = new \GuzzleHttp\Client([
        'base_uri' => config('teamwork.apilink'),
        'auth' => [config('teamwork.apikey'), 'x'],
        'verify' => false
    ]);

    $response = $client->get('v1/tickets/search.json', [
        'query' => ['sortDir' => 'desc', 'sortBy' => 'updatedAt']
    ])->where('id', 'LIKE', '4477011');

    $json = (string)$response->getBody()->getContents();
    dd(json_decode($json, true));
}
}

如果没有粘贴所有票证的位置,“位置”只是错误 = '调用未定义的方法 GuzzleHttp\Psr7\Response::where()'

标签: phplaravel

解决方案


有多种解决方案可以完成这项工作。你可以为此使用 Laravel 集合。

$tickets = collect(json_decode($response->getBody()->getContents(), true));

$tickets = $tickets->filter(function($ticket) {
    return $ticket['createdAt'] >= now();
});

或者像评论中建议的 Script47 一样,您也可以使用 array_filter 方法(Laravel 也在后台使用该方法):

$tickets = array_filter($tickets, function($ticket) {
    return $ticket['createdAt'] > now();
});

使用 Laravel 的 Collections 的好处是 Laravel 提供了很多方法让你的生活更轻松,但缺点是在某些情况下它可能会更慢。这实际上取决于您要完成的工作。就我个人而言,我喜欢使用 Collection,它看起来更干净(imo)并节省了我一些时间。


推荐阅读