我是谷歌数据存储的新手,我无法获得所有实体。这是我的代码。
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"用来代替"返回"。这意味着返回的变量只是一个生成器对象。我没有使用生成器,所以我无法获取生成的数据。这就是我得到这个问题的原因。顺便说一句,我的所有代码都很好。 :)
感谢您的回复。
答案 0 :(得分:0)
我不是PHP开发人员,但看起来您正在使用事务来加载实体的所有记录。这是不允许的,因为事务内的查询应该是祖先查询。我的猜测是你可能会得到一个异常/错误,表明它是相同的,但是被某个地方吞没了。如果您只需阅读实体,则不需要进行交易,只需使用数据存储即可。