php - 如果指针对象不存在或指针未定义,总是获取指针值?
问题描述
我的问题与ParsePlatform PHP-SDK有关:
我有一张post
桌子,在这张桌子上我有一个指针列offer
。该指针对于帖子是可选的。这个指针可能有一个objectId
提议或可能有一个空或可能有一个错误objectId
的提议。
当我使用此代码时:
$offer = $post->get('offer');
如果存在则返回报价详细信息,如果不存在且指针值无效,则返回空白值。
我想要的是:我想识别所有错误的指针值,这是否可以知道指针值是否错误(Offer not exist)?
这是我的代码:
try{
$result = ParseCloud::run("searchForumPosts",$params);
$posts_found = $result['completeLength'];
foreach($result['posts'] as $post){
$offer = $post->get('offer');
$offer_name = "";
if(!empty($offer)){
$offer_name = $offer->getObjectId();
}
}
}
catch(ParseException $error){
var_dump($error);
}
- 我想要
$offer_name=undefined
如果undefined
在后表中。 - 我想要
$offer_name=offer deleted
,如果在 post 表offer
列中有一个对象 id,但表中不存在该对象offer
。 $offer_name = offerId
如果报价存在于报价表中,我想要。这是有效的。我无法跟踪前两个条件
这是我的 Parse Cloud 函数:
// give suggestions for the offer number on min of 2 numbers
Parse.Cloud.define("searchForumPosts", function(request, response) {
isRequestLegitimate(request).then(function(result) {
if (result.legitimateRequest) {
var query = new Parse.Query("ForumPost");
var completeLength = 0;
findTextInSearchTerms(query, request.params.wildcard, "searchTerms").then(function(ids) {
var query2 = new Parse.Query("ForumPost");
if ((ids == -1 || ids.length == 0)) {
completeLength = 0;
return [];
} else {
completeLength = ids.length;
// not very efficient, if the wildcard is empty we still ask for findTextInSearchTerms, change that later on
query2.containedIn("objectId", ids);
if (request.params.pageSize && request.params.pageNumber) {
var pageSize = parseInt(request.params.pageSize);
var pageNumber = parseInt(request.params.pageNumber);
query2.limit(pageSize);
if (pageNumber > 1) {
query2.skip((pageNumber - 1) * pageSize);
}
}
query2.include("offer");
query2.include("offer.artist");
query2.include("creator");
query2.descending("createdAt");
query2.select("objectId","offer.isActive","offer.stopDate", "offer", "offer.objectId", "offer.artist", "offer.artist.firstname", "offer.artist.lastname", "offer.title", "offer.picHash", "title", "text", "offer.offer", "creator", "creator.firstname", "creator.lastname", "replies");
return query2.find({
useMasterKey: true
});
}
}, function(error) {
return error;
}).then(function(foundPosts) {
console.log('foundPosts',foundPosts);
if (foundPosts.length > 1) {
var sortBy = request.params.sortBy;
if (sortBy == "artist") {
foundPosts.sort(function(a, b) {
console.log('foundPosts a',a);
console.log('foundPosts b',b);
var nameA = 'ZZZZZZZZZ';
var nameB = 'ZZZZZZZZZ';
if (a.offer) {
nameA = ((a.offer || {}).artist || {}).lastname.toUpperCase();
}
if (b.offer) {
nameB = ((b.offer || {}).artist || {}).lastname.toUpperCase();
}
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
// names must be equal
return 0;
});
} else if (sortBy == "author") {
foundPosts.sort(function(a, b) {
var nameA = 'ZZZZZZZZZ';
var nameB = 'ZZZZZZZZZ';
if (a.offer) {
nameA = ((a.offer || {}).creator || {}).lastname.toUpperCase();
}
if (b.offer) {
nameB = ((b.offer || {}).creator || {}).lastname.toUpperCase();
}
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
// names must be equal
return 0;
});
}
}
console.log('foundPostsfoundPosts',foundPosts);
var results = {};
results.completeLength = completeLength;
results.posts = foundPosts;
response.success(results);
}, function(error) {
response.error(error);
});
} else {
response.error("You must be logged in!");
}
});
});
解决方案
由于您是query2.include("offer");
在云代码查询中进行的,Parse Server 将尝试自动获取每个帖子的关联报价。offer.objectId
因此,只有存在且有效时才会返回。这意味着您将offer.objectId
在客户端代码中收到有效的或未定义的。您将无法区分它被删除或未定义的情况。如果区分它对你来说真的很重要,你不应该query2.include("offer");
在你的云代码查询中使用,而是分别获取每个报价,以便你可以将此信息发送到客户端代码。
推荐阅读
- c# - 列表视图内的可点击图像
- facebook - Facebook graph api从帖子评论中获取用户ID
- python - Python argparse 更多参数互斥
- apache-kafka - Apache Kafka 2.0 获得消费者滞后
- python - wxPython、wxformBuilder 和 matplotlib:将图形调整为面板大小
- python - 正则表达式 python 非字母数字字符
- oracle - 在 PLSQL 上比较日期
- javascript - js regex - match either space with specific character
- android - 如何通过 okhttp 验证 Http/2?
- react-native - React 导航将初始路由传递给 createappContainer