如果指针对象不存在或指针未定义,总是获取指针值?
Posted
技术标签:
【中文标题】如果指针对象不存在或指针未定义,总是获取指针值?【英文标题】:Always getting pointer value, if the pointer object not exist or pointer is undefined? 【发布时间】:2019-08-13 18:53:42 【问题描述】:我的问题与ParsePlatform PHP-SDK有关:
我有一个post
表,在这个表中我有一个指针列offer
。该指针对于帖子是可选的。这个指针可能有一个objectId
的报价,或者可能有一个空值,或者可能有一个错误的objectId
的报价。
当我使用此代码时:
$offer = $post->get('offer');
如果存在则返回报价详情,如果不存在且指针值无效则返回空白值。
我想要的是:我想识别所有错误的指针值,这样可以知道指针值是否错误(Offer不存在)吗?
这是我的代码:
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);
-
如果
undefined
在帖子表中,我想要$offer_name=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!");
);
);
【问题讨论】:
“指针列”到底是什么意思? Afaik 这不是 sql 概念。您是否已经在使用外键,还是您正在寻找的外键? 另外,由于$offer = $post->get('offer');
是 php 而不是 sql,因此您可能在两者之间使用了一些抽象层。什么样的层? Post 类是什么样的?
@Stratadox 这个问题从来没有提到 SQL,标签与 ParsePlatform 和 ParseServer 有关。
哈,我的错,一定是看错了。
只是为了了解您的需求。您是否要执行一个查询,该查询将返回报价字段中具有无效对象 ID 的所有帖子?
【参考方案1】:
由于您在云代码查询中执行query2.include("offer");
,解析服务器将尝试自动获取每个帖子的关联报价。因此,如果它存在并且有效,它只会返回offer.objectId
。这意味着您将收到有效的offer.objectId
或在您的客户端代码中未定义。您将无法区分它被删除或未定义的情况。如果区分它对你来说真的很重要,你不应该在你的云代码查询中使用query2.include("offer");
,而是分别获取每个报价,这样你就可以将此信息发送到客户端代码。
【讨论】:
它总是为所有存在的offer返回一个Offer Deleted
。和blank
删除报价和未定义报价的值
可以分享一下你的云代码功能的代码吗?
我刚刚用云函数代码更新了我的问题
我看不到。我认为您试图更新我的答案而不是您的问题。以上是关于如果指针对象不存在或指针未定义,总是获取指针值?的主要内容,如果未能解决你的问题,请参考以下文章