【发布时间】:2018-02-14 05:04:38
【问题描述】:
我还没有找到任何关于此的文档,尽管它必须存在于某个地方,因为它相当简单。
我可以使用 PHP 查询所有任务列表(例如),如下所示:
$query = $datastore->query();
$query->kind('tasklist')
->filter('date_approved', '<', 0)
->order("date_approved")
->order("date_updated", $query::ORDER_DESCENDING)
->limit(50);
$res = $datastore->runQuery($query);
要查看密钥(例如,用于更新),我一直在使用:
foreach($res as $r) {
$parentkey = $r->key()->pathEnd()['name'];
echo $parentkey; //"default"
}
我注意到如果我“加入”子记录,它们的创建方式如下:
$childkey = $datastore->key('tasklist', $parentkey)
->pathElement('task', 'task001');
$entity = $datastore->entity($childkey, $myTaskArray);
$datastore->upsert($entity);
当我稍后通过“父”键查询时:
$subquery = $datastore->query();
$subquery->kind('task')
->filter('date_approved','<',0)
->hasAncestor( $datastore->key('tasklist', $parentkey) )
->order("date_approved")
->order("date_updated", $subquery::ORDER_DESCENDING);
$subres = $datastore->runQuery($subquery);
然后为孩子打印密钥将起作用:
foreach($subres as $sr){
$childkey = $sr->key()->pathEnd()['name'];
echo $childkey; //"task001"
}
有没有一种方法可以处理祖先的键和键,比:$entity->key()->pathEnd()['name'];
例如,在 MongoDB 中
$myobj = array();
$db->Insert($myobj);
echo (string) $myobj['_id']; //key
另外,我是否应该能够通过单独提供密钥来更新文档,而不必指定祖先密钥?
$childkey = $datastore->key('tasklist', $parentkey)
->pathElement('task', "task001");
$entity = $datastore->lookup($childkey);
$entity = $datastore->entity($childkey, $myUpdatedTaskArray);
$datastore->update($entity, array("allowOverwrite"=>true));
对比:
$childkey = $datastore->key('task', "task001");
$entity = $datastore->lookup($childkey);
$entity = $datastore->entity($childkey, $myUpdatedTaskArray);
$datastore->update($entity, array("allowOverwrite"=>true));
最后,我可以查询实体及其后代,而无需进行连接(就像我在上面所做的那样),同时仍然过滤(例如 date_approved
注意:goofball 是一个非技术术语
【问题讨论】:
标签: php google-cloud-datastore google-cloud-platform