【发布时间】:2017-02-28 06:00:23
【问题描述】:
我是 google 数据存储区的新手,我无法将所有实体都放在一个种类下。这是我的代码。
use Google\Cloud\Datastore\DatastoreClient;
use Google\Cloud\Datastore\Query\Query;
function get_datastore_client(){
# Your Google Cloud Platform project ID
$projectId = 'my-project-id';
# Instantiates a client
$datastore = new DatastoreClient([
'projectId' => $projectId
]);
return $datastore;
}
function get_athlete_list(DatastoreClient $datastore){
$transaction = $datastore->transaction();
$query = $datastore->query()
->kind('Athlete')
->order('country');
$result = $transaction->runQuery($query);
$transaction->commit();
return $result;
}
$datastore = get_datastore_client();
$all_athletes = get_athlete_list($datastore);
当我运行它时,我得到了空结果。请帮我找出问题所在。
更新:
我尝试过使用数据存储而不是事务,但它也不起作用。没有事务的函数如下。
function get_athlete_list(DatastoreClient $datastore){
$query = $datastore->query()
->kind('Athlete')
->order('country');
$result = $datastore->runQuery($query);
return $result;
}
奇怪的是我可以通过它的 ID 得到一个实体,函数如下。我就是无法获取所有实体。
(This function works.)
function lookup_athlete(DatastoreClient $datastore, $athlete_id){
$transaction = $datastore->transaction();
$kind = 'Athlete';
$athleteKey = $datastore->key($kind, $athlete_id);
$athlete = $transaction->lookup($athleteKey);
if(empty($athlete)){
$transaction->rollback();
}
return $athlete;
}
所以我认为这可能是一个设置问题,但我无法找到。根据本文档Accessing the Cloud Datastore API from a Compute Engine instance,我在计算引擎实例中运行了它,并且我有一个 APP 引擎实例正在运行。
更新解决方案:
经过数小时的研究,我发现在数据存储库中,使用“yield”而不是“return”。这意味着返回的变量只是一个生成器对象。而且我没有使用生成器,所以无法获取生成的数据。这就是我遇到问题的原因。顺便说一句,我所有的代码都很好。 :)
感谢大家的回复。
【问题讨论】:
-
您是否尝试在没有 order 子句的情况下运行查询?
-
嗨迈克尔,我试过了,但还是不行。
标签: php google-app-engine error-handling google-cloud-datastore