gpt4 book ai didi

php - 无法在Google数据存储区中使用一种获取所有实体(使用PHP)

转载 作者:行者123 更新时间:2023-12-03 08:50:25 26 4
gpt4 key购买 nike

我是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”。这意味着返回的变量只是一个生成器对象。而且我没有使用生成器,所以无法获取生成的数据。这就是为什么我遇到了这个问题。顺便说一句,我所有的代码都很好。 :)

感谢您的所有答复。

最佳答案

我不是PHP开发人员,但是您似乎正在使用事务从实体加载所有记录。不允许这样做,因为事务内的查询应该是祖先查询。我的猜测是,您可能会收到表示相同内容的异常/错误,但被某处吞没了。如果您需要阅读所有实体,则不需要事务,只需使用数据存储即可。

关于php - 无法在Google数据存储区中使用一种获取所有实体(使用PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42501292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com