我创建了一个从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 ()’
发布于 2019-04-01 22:50:13
首先,您需要从请求中提取数据:
$response = $client->get('v1/tickets/search.json', [
'query' => ['sortDir' => 'desc', 'sortBy' => 'updatedAt']
])->where('id', 'LIKE', '4477011');
$json = $response->getBody()->getContents();然后您可以从响应数组创建一个collection:
$json = json_decode($json, true);
$collection = collect($json['items']);现在您可以使用我在上面链接的官方文档中描述的方法来过滤集合:
$collection = $collection->where('id','4477011');所有可用的方法:https://laravel.com/docs/5.8/collections#available-methods
请注意,通过这种方式,您将从teamwork api下载所有票证,并在您的应用程序上过滤结果。如果您只想接收过滤后的票证,您可能需要仔细阅读API文档并创建相应的请求。
发布于 2019-04-01 22:48:57
要做到这一点,有多种解决方案。你可以使用Laravel Collection来做这件事。
$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,它看起来更干净(国际海事组织),并节省了我的时间。
https://stackoverflow.com/questions/55457688
复制相似问题