php - 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()'
解决方案
有多种解决方案可以完成这项工作。你可以为此使用 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)并节省了我一些时间。
推荐阅读
- angular - 'com2' 等组件名称的 Angular CLI 组件生成错误
- reactjs - React Native 中的过滤问题
- shell - 想要下载可从主页访问的 html 文件列表
- javascript - 执行顺序——Promise 回调什么时候执行?
- c# - 使用本地数据库中的信息在使用 Xamarin 的 Android 中显示通知信息
- swift - 当我没有主故事板时,如何在 Xcode 11.4 中修复“线程 1:异常:在捆绑 NSBundle 中找不到名为'Main'的故事板”错误?
- flutter - 在 Flutter 和 Dart 中重构小部件的最优雅/高效的方式
- javascript - 多图像幻灯片 Javascript 问题
- python - 如何在python中列出的字典中检索键值对?
- javascript - 如何在函数之外访问 promise 回调值?