首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP/Laravel中数组的->where()的替代方法

PHP/Laravel中数组的->where()的替代方法
EN

Stack Overflow用户
提问于 2019-04-01 22:37:00
回答 2查看 881关注 0票数 1

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

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

代码语言:javascript
复制
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 ()’

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-01 22:50:13

首先,您需要从请求中提取数据:

代码语言:javascript
复制
$response = $client->get('v1/tickets/search.json', [
    'query' => ['sortDir' => 'desc', 'sortBy' => 'updatedAt']
])->where('id', 'LIKE', '4477011');

$json = $response->getBody()->getContents();

然后您可以从响应数组创建一个collection

代码语言:javascript
复制
$json = json_decode($json, true);
$collection = collect($json['items']);

现在您可以使用我在上面链接的官方文档中描述的方法来过滤集合:

代码语言:javascript
复制
$collection = $collection->where('id','4477011');

所有可用的方法:https://laravel.com/docs/5.8/collections#available-methods

请注意,通过这种方式,您将从teamwork api下载所有票证,并在您的应用程序上过滤结果。如果您只想接收过滤后的票证,您可能需要仔细阅读API文档并创建相应的请求。

票数 2
EN

Stack Overflow用户

发布于 2019-04-01 22:48:57

要做到这一点,有多种解决方案。你可以使用Laravel Collection来做这件事。

代码语言:javascript
复制
$tickets = collect(json_decode($response->getBody()->getContents(), true));

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

或者像Script47在评论中建议的那样,你也可以使用array_filter方法( Laravel也在幕后使用):

代码语言:javascript
复制
$tickets = array_filter($tickets, function($ticket) {
    return $ticket['createdAt'] > now();
});

使用Laravel的Collections的好处是Laravel提供了许多方法来让您的生活更轻松,但缺点是在某些情况下它可能会更慢。这真的取决于你到底想要实现什么。就我个人而言,我喜欢使用Collection,它看起来更干净(国际海事组织),并节省了我的时间。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55457688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档