2015-12-06 80 views
1

使用PHP-GDS庫時,當密鑰格式爲「__xyz__」時嘗試「插入」實體時會收到異常。找到異常:關鍵路徑元素名稱「__xyz__」無效

有沒有辦法解決這個問題,因爲關鍵是我可能無法控制的用戶名,__xyz__是一個完全有效的用戶名。下面的代碼和異常消息:

$username = "__xyz__"; 

$obj_user = new Entity(); 
$obj_user->setKeyName($username); 
try { 
    $result = $obj_user_store->upsert($obj_user); 
}catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
    return false; 
} 

例外:

Caught exception: The key path element name "__xyz__" is reserved. 

回答

1

不幸的是沒有,你要編碼用戶名某種方式。或者,我建議使用自動生成的密鑰,並將用戶提供的數據存儲在值中,而不是密鑰。

文檔是非常糟糕的這種情況下,只有一個關於提到,在替代的Python API,用於數據存儲的文檔:https://cloud.google.com/appengine/docs/python/datastore/entities:「鍵的名稱不能開始,以兩個下劃線__*__結束」。 Java文檔不會對此說任何話。也不是現代的Python API。我找不到Datastore的任何PHP文檔。

但是它對於所有的API都是一樣的,因爲異常發生在數據庫端,所以使用哪種語言並不重要(它是所有的protobufs)。

我知道雙下劃線的只有一個用途:當您生成一個查詢,並希望升序排序/按鍵下降。您可以通過使用名爲__key__的不存在的保留密鑰進行排序來完成此操作。