如何在php中为GAE数据存储生成实体ID?

时间:2014-12-25 05:20:09

标签: php google-cloud-datastore google-api-php-client

我正在尝试使用PHP客户端库将新实体插入数据存储区,我正在使用此示例中的datastore_connect.php文件,https://github.com/amygdala/appengine_php_datastore_example

我想插入带有自动ID的实体,而不是名称。我看到有函数setId(),但我不知道如何生成正确的id。这样做的最佳做法是什么?

由于

function createKeyForTestItem () {
    $path = new Google_Service_Datastore_KeyPathElement();
    $path->setKind("testkind");
    $path->setName("testkeyname");
    //$path->setId(??)
    $key = new Google_Service_Datastore_Key();
    $key->setPath([$path]);
    return $key;
}

2 个答案:

答案 0 :(得分:2)

您可以让Cloud Datastore通过填充突变上的insertAutoId字段而不是upsert字段来为您生成ID。

这是一个代码段(改编自您发布的datastore_connect.php文件):

function create_key() {
  $path = new Google_Service_Datastore_KeyPathElement();
  $path->setKind("testkind");
  // Neither name nor ID is set.
  $key = new Google_Service_Datastore_Key();
  $key->setPath([$path]);
  return $key;
}
function create_entity() {
  $entity = new Google_Service_Datastore_Entity();
  $entity->setKey(create_key());
  // Add properties...
  return $entity;
}
function create_commit_request() {
  $entity = create_entity();
  $mutation = new Google_Service_Datastore_Mutation();
  $mutation->setInsertAutoId([$entity]);  // Causes ID to be allocated.
  $req = new Google_Service_Datastore_CommitRequest();
  $req->setMode('NON_TRANSACTIONAL');
  $req->setMutation($mutation);
  return $req;
}

答案 1 :(得分:0)

如果你正在寻找一个PHP库来消除Cloud Datastore的大部分问题,你可以尝试我的新库,它位于官方google-api-php-client之上:

https://github.com/tomwalder/php-gds

这是一个示例代码段,用于创建具有自动生成ID的实体

$obj_book = new GDS\Entity();
$obj_book->title = 'Romeo and Juliet';
$obj_book->author = 'William Shakespeare';
$obj_book->isbn = '1840224339';

// Write it to Datastore
$obj_book_store->upsert($obj_book);

有关GitHub的更多代码段和文档。