在Elgg中存储键值字典

I am working on a plugin for Elgg that keeps track of device ids that are sent to the application when logging in from your mobile phone. For this, I would like to store these device ids in the database and would like to use ElggObjects for this.

This is what I do now:

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();
     }
}

So this generates two ElggObjects that hold ids for android and for ios devices, stored in the metadata field tags. This array of tags can however not be retrieved anymore. When I do:

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

tokens remains empty. Does someone know what I am doing wrong? Am I using the Elgg objects wrong?

I think the reason you're running into issues there is that elgg_get_entities returns an array of entities.

Am I correct in assuming that you'll only ever have one of each token object subtype? (One for iOS and one for Android?)

If so, I would modify your code as follows:

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();
 }
}

Later, when grabbing the entity:

$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