如何使用 php parse-server sdk 将 ParseQuery::orQueries 与 matchQuery 结合起来

Posted

技术标签:

【中文标题】如何使用 php parse-server sdk 将 ParseQuery::orQueries 与 matchQuery 结合起来【英文标题】:How do you combine ParseQuery::orQueries with matchesQuery using the php parse-server sdk 【发布时间】:2016-12-20 01:32:39 【问题描述】:

我的 php 代码中不再使用 REST API,而是转换为 php sdk 进行解析。

我无法将此 REST API 查询转换为解析 php-sdk 的正确语法,并且可以使用一些指针。

这是有效的 REST API 查询。

              where=
                      "phostId":
                        "__type":"Pointer","className":"Hosts","objectId":"'.$hostObjId.'",
                        "isCompany":false,
                        "expunged":"$nin":[true],
                            "$or":[
                                "endDate":
                                    "$gte":
                                        
                                          "__type":"Date",
                                          "iso":"'.$now.'"
                                        
                                    
                                ,
                                "isPerm":true
                                ]
                          
                &keys=pvisitorId,company,isPerm,startDate,endDate,name
                &include=pvisitorId&order=-name'; 

我可以毫无问题地根据指针进行查询,但我无法弄清楚如何在 OR 子句中工作。

这是我目前所拥有的。

//Query the pointer for an object id matching our user session id
 $innerQuery = new ParseQuery("Hosts");
 $innerQuery->equalTo("objectId",$_SESSION['host_object_id'] );

//Building two queries used for the OR condition
   $endDate = new ParseQuery("Authorizations");
   $endDate->greaterThan("endDate", $date);      
   $isPerm = new ParseQuery("Authorizations");
   $isPerm->equalTo("isPerm", True);

 //create primary query
 $query = new ParseQuery("Authorizations"); 

 //set filters
 $query->equalTo("isCompany",False);
 $query->notEqualTo("expunged",True);

 ////This is what I am trying to add to $query just not sure how to do it.
 $mainQuery = ParseQuery::orQueries([$endDate, $isPerm]);
 $results1 = $mainQuery->find();

 //Sort, Limit, add InnerQuery
 $query->addDescending("name");     
 $query->limit(1);  
 $query->matchesQuery("phostId", $innerQuery);    

 // All results:
 $results = $query->find();

在此先感谢您对我所缺少的内容的任何帮助或指示。

【问题讨论】:

【参考方案1】:

您只能将matchesQuery 用于指针。对于您的情况,您必须使用matchesKeyInQuery

$query->matchesKeyInQuery("phostId", "objectId", $innerQuery);

objectId 替换为您要比较的ID 的列名。

希望这会有所帮助:)

【讨论】:

感谢叶敏赫图特。我仍然很难看到将 OR 查询组合到整体查询中的位置。 感谢叶敏赫图特。我仍然很难看到将 OR 查询组合到整体查询中的位置。在我上面的代码中,我有 5 个不同的查询。 1) 对于我的指针 $innerQuery 2) 对于我的 OR 查询 $endDate 和 $isPerm 1) 这是实际的 OR 查询 $mainQuery 1 ) 最后是我希望看到上述所有查询结果的最终查询或父查询,它被命名为 $query 似乎我应该能够将 OR 查询嵌套在父查询中的某处. 您可以检查您的日期对象或编辑您如何初始化您的日期对象的答案吗?您的日期对象似乎有问题。

以上是关于如何使用 php parse-server sdk 将 ParseQuery::orQueries 与 matchQuery 结合起来的主要内容,如果未能解决你的问题,请参考以下文章

Flutter parse-server sdk 无法删除对象

Parse-Server iOS SDK - 创建返回 PFQuery 结果的函数

Parse-Server后台搭建与使用进阶篇(二)- Parse-server常见问题及解决方法

parse-server:如何区分用户类 BeforeSave 中的 signUp 和常规 ParseUser.save?

解析云代码迁移后如何更新到最新版本的 Parse-SDK-JS

如何使用 iptables 和 parse-server (Parse Server) 将 HTTP 重定向到 HTTPs