如果未定义实体属性,则会导致存储PHP出错


Azuretable storage PHP if entity Properties Not defined Results in Error

我有存储在Azure表存储中的数据。。对于每个客户,我都有一些属性(如姓名、电子邮件、地址属性)。对于某些客户,我们没有这些特性。(稍后在旅程中添加)

当我试图通过PHP提取客户实体属性时,如果没有定义该属性,就会引发致命错误。

例如,在下面的代码中,我有additional_attribute实体Property,它只为少数客户定义。并不是所有客户都有这个实体。如果我使用以下代码,它将引发致命错误。

如何处理此异常。

$tableRestProxy = ServicesBuilder::getInstance()->createTableService($this->connectionString);
$filter = "PartitionKey eq '" . $this->apiusr . "' and RowKey eq '" . $this->apiusr . "' and apiseceret eq '" . $this->apipass . "'";
$entities = $result->getEntities();
if (count($entities) > 0 ) 
{
$this->user_valid = true;
$this->cid = $entity->getProperty("cid")->getValue();
**$this->additonal_attribute = $entity->getProperty("additiona_attributes")->getValue()**; <--------------
}

既然这是NOSQL数据库,那么在PHP中有什么解决方案呢?(每行的架构可能不同)。如何在PHP中处理此问题?

我使用的代码来自http://www.windowsazure.com/en-us/develop/php/how-to-guides/table-service/

没有使用过PHP(所以我可能错了),但你会因为试图获取null对象的值而出现这个错误吗?当您对不具有此属性的实体调用getProperty()时,它将返回null,然后您对该null对象调用getValue()

我在GitHub上查找了PHP SDK的源代码,找到了另一种可以尝试的方法。该方法是getPropertyValue($name)。如果在实体中找不到属性,则使用此方法,将返回null值。所以你的代码看起来像:

$this->additonal_attribute = $entity->getPropertyValue("additiona_attributes")