首页 > 解决方案 > 如果指针对象不存在或指针未定义,总是获取指针值?

问题描述

我的问题与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);
    }
  1. 我想要$offer_name=undefined如果undefined在后表中。
  2. 我想要$offer_name=offer deleted,如果在 post 表offer列中有一个对象 id,但表中不存在该对象offer
  3. $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!");
        }
    });
});

标签: phpparsingparse-platformparse-server

解决方案


由于您是query2.include("offer");在云代码查询中进行的,Parse Server 将尝试自动获取每个帖子的关联报价。offer.objectId因此,只有存在且有效时才会返回。这意味着您将offer.objectId在客户端代码中收到有效的或未定义的。您将无法区分它被删除或未定义的情况。如果区分它对你来说真的很重要,你不应该query2.include("offer");在你的云代码查询中使用,而是分别获取每个报价,以便你可以将此信息发送到客户端代码。


推荐阅读