msgraph-sdk-php v2如何简化返回对象的数据获取操作?
解决方案
你可以利用msgraph-sdk-php v2.x提供的实体类封装方法,完全不需要直接操作BackingStore,代码会简洁很多:
方法一:优化现有集合取值逻辑
get()方法返回的是用户集合对象,先通过getValue()获取用户数组,再调用实体类的getter方法获取signInActivity:
// 获取用户集合 $userCollection = $o365->users()->get($request)->wait(); // 取第一个匹配的用户实体 $targetUser = $userCollection->getValue()[0]; // 获取signInActivity对象 $signInActivity = $targetUser->getSignInActivity(); // 直接获取具体登录属性 $lastSignInDateTime = $signInActivity->getLastSignInDateTime(); $lastNonInteractiveSignInDateTime = $signInActivity->getLastNonInteractiveSignInDateTime();
方法二:直接获取单个用户(更高效)
既然你是通过userPrincipalName过滤单个用户,没必要用集合查询,直接调用byUserIdOrUserPrincipalName()方法获取单个用户,减少集合处理步骤:
// 构建单个用户的请求配置 $singleUserConfig = new UserItemRequestBuilderGetRequestConfiguration(); $singleUserConfig->queryParameters = UserItemRequestBuilderGetRequestConfiguration::createQueryParameters(); $singleUserConfig->queryParameters->select = ['signInActivity']; // 直接通过用户主体名获取目标用户 $targetUser = $o365->users()->byUserIdOrUserPrincipalName($data['user'])->get($singleUserConfig)->wait(); // 获取signInActivity及属性 $signInActivity = $targetUser->getSignInActivity(); $lastSignInTime = $signInActivity->getLastSignInDateTime();
说明
你之前直接操作BackingStore是绕开了SDK的封装层,而v2.x版本的SDK为所有实体(比如User、SignInActivity)都提供了官方推荐的getter方法,这些方法既安全又简洁,完全替代底层存储的直接访问。
内容的提问来源于stack exchange,提问作者Destinqo
相关产品推荐
相关产品推荐

