2015-03-19 166 views
1

我正在爲Elgg開發一個插件,用於跟蹤從移動電話登錄時發送給應用程序的設備ID。爲此,我想將這些設備標識存儲在數據庫中,並希望爲此使用ElggObjects。在Elgg中存儲鍵值字典

這就是我現在做的事:

function initialize() { 
    $androidTokens = elgg_get_entities(array(
      'type' => 'object', 
      'subtype' => 'androidTokens', 
      'limit' => 0 
    )); 
    $iosTokens = elgg_get_entities(array(
      'type' => 'object', 
      'subtype' => 'iosTokens', 
      'limit' => 0 
    )); 

    if ($androidTokens == 0) { 
      $tokenObject = new ElggObject(); 
      $tokenObject->subtype = 'androidTokens'; 
      $tokenObject->tags = array(); 
      $tokenObject->save(); 
    } 

    if ($iosTokens == 0) { 
      $tokenObject = new ElggObject(); 
      $tokenObject->subtype = 'iosTokens'; 
      $tokenObject->tags = array(); 
      $tokenObject->save(); 
    } 
} 

所以這會產生持有的Android和iOS設備,存儲在元數據字段標識號不同ElggObjects。然而,這個標籤數組不能再被檢索。當我這樣做時:

$tokenObject = elgg_get_entities(array(
         'type' => 'object', 
         'subtype' => $os.'Tokens', 
         'limit' => 0 
        )); 
       $tokens = $tokenObject->tags 

標記仍爲空。有人知道我在做什麼錯嗎?我使用Elgg對象是否錯誤?

回答

0

我認爲你遇到問題的原因是elgg_get_entities返回一個實體數組。

我正確地認爲你只會有每個令牌對象的子類型之一嗎? (一個用於iOS系統,一個用於Android的?)

如果是的話,我會如下修改代碼:

function initialize() { 
$androidTokens = elgg_get_entities(array(
     'type' => 'object', 
     'subtype' => 'androidTokens', 
     'limit' => 1 // only expecting one entity 
)); 
$iosTokens = elgg_get_entities(array(
     'type' => 'object', 
     'subtype' => 'iosTokens', 
     'limit' => 1 // only expecting one entity 
)); 

if (count($androidTokens) == 0) { 
     $tokenObject = new ElggObject(); 
     $tokenObject->subtype = 'androidTokens'; 
     $tokenObject->tags = array(); 
     $tokenObject->save(); 
} 

if (count($iosTokens) == 0) { 
     $tokenObject = new ElggObject(); 
     $tokenObject->subtype = 'iosTokens'; 
     $tokenObject->tags = array(); 
     $tokenObject->save(); 
} 
} 

後來,抓住實體時:

$tokenObject = elgg_get_entities(array(
        'type' => 'object', 
        'subtype' => $os.'Tokens', 
        'limit' => 1 // only grab one 
       )); 
$tokens = $tokenObject[0]->tags; // get tag data for first (and only) entity