You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP SDK调用Microsoft Graph仅返回200条结果,如何获取全部条目?

问题解答:Microsoft Graph 获取DriveItem结果仅返回200条的处理方案

问题描述

调用以下代码获取根目录下的DriveItem时,仅返回200条结果,但实际根目录存在300+个目录:

$driveItems = $response->getResponseAsObject(\Microsoft\Graph\Model\DriveItem::class);

查询到相关setPageSize()的用法示例:

$docGrabber = $graph->createCollectionRequest("GET", "/me/drive/root/children")
                ->setReturnType(Model\DriveItem::class)
                ->setPageSize(2);

同时了解到:

部分针对Microsoft Graph的查询会返回多页数据,原因可能是服务器端分页或使用了$top查询

后续补充的参考信息:

注意:如果集合超出默认页面大小(200条),响应中会返回@odata.nextLink属性,表明还有更多可用项目,并提供下一页项目的请求URL。

$top 设置结果的页面大小。

需要解决的问题:

  1. $top查询应在哪里设置?
  2. $top会对总记录数产生怎样的影响?
  3. 获取超过200条结果的最佳方式是什么?

解答

1. $top的设置位置

在Microsoft Graph PHP SDK中,有两种规范的设置方式:

  • 直接拼接请求参数:在请求URL后追加查询参数,示例:
    $docGrabber = $graph->createCollectionRequest("GET", "/me/drive/root/children?$top=300")
                    ->setReturnType(Model\DriveItem::class);
    
  • 使用SDK的addQueryOptions()方法:更贴合SDK设计的用法,示例:
    use Microsoft\Graph\Core\GraphConstants;
    
    $docGrabber = $graph->createCollectionRequest("GET", "/me/drive/root/children")
                    ->setReturnType(Model\DriveItem::class)
                    ->addQueryOption(GraphConstants::QUERY_TOP, 300);
    

2. $top对总记录数的影响

$top仅用于限制单次请求返回的最大结果数量,不会改变实际存在的总记录数:

  • 当$top值小于实际总记录数时,仅返回对应数量的结果,剩余数据需通过分页获取
  • 当$top值大于实际总记录数时,会返回所有存在的结果
  • 注意:大部分文件相关的Graph接口对$top有上限限制,通常最大允许设置为999,超过上限会自动按接口允许的最大值返回

3. 获取超过200条结果的最佳方式

由于Graph默认采用服务器端分页(默认页大小200),最佳方式是通过分页遍历获取全部结果,利用响应中的@odata.nextLink循环请求下一页数据,SDK提供了便捷的实现方式:

方式一:默认分页遍历

$request = $graph->createCollectionRequest("GET", "/me/drive/root/children")
                ->setReturnType(Model\DriveItem::class);

$allDriveItems = [];
do {
    $pageItems = $request->execute();
    $allDriveItems = array_merge($allDriveItems, $pageItems);
    // 检查并设置下一页请求链接
} while ($request->getNextLink() && $request->setNextLink($request->getNextLink()));

方式二:结合$top调整页大小

如果需要减少请求次数,可设置较大的$top值(如999),再配合分页获取剩余数据:

use Microsoft\Graph\Core\GraphConstants;

$request = $graph->createCollectionRequest("GET", "/me/drive/root/children")
                ->setReturnType(Model\DriveItem::class)
                ->addQueryOption(GraphConstants::QUERY_TOP, 999);

$allDriveItems = [];
do {
    $pageItems = $request->execute();
    $allDriveItems = array_merge($allDriveItems, $pageItems);
} while ($request->getNextLink() && $request->setNextLink($request->getNextLink()));

内容的提问来源于stack exchange,提问作者JI-Web

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 08:42:34