code: protected function saveAttribute($objAttribute, $arrIds, $varData, $strLangCode)
      {
          // Call the serializeData for all simple attributes.
          if ($this->isSimpleAttribute($objAttribute)) {
              /** @var \MetaModels\Attribute\ISimple $objAttribute */
              $varData = $objAttribute->serializeData($varData);
          }
  
          $arrData = array();
          foreach ($arrIds as $intId) {
              $arrData[$intId] = $varData;
          }
  
          // Check for translated fields first, then for complex and save as simple then.
          if ($strLangCode && $this->isTranslatedAttribute($objAttribute)) {
              /** @var ITranslated $objAttribute */
              $objAttribute->setTranslatedDataFor($arrData, $strLangCode);
          } elseif ($this->isComplexAttribute($objAttribute)) {
              // Complex saving.
              $objAttribute->setDataFor($arrData);
          } elseif ($this->isSimpleAttribute($objAttribute)) {
              $objAttribute->setDataFor($arrData);
          } else {
              throw new \RuntimeException(
                  'Unknown attribute type, can not save. Interfaces implemented: ' .
                  implode(', ', class_implements($objAttribute))
              );
          }
      }
docs: Update an attribute for the given ids with the given data.
  
  @param IAttribute $objAttribute The attribute to save.
  
  @param array      $arrIds       The ids of the rows that shall be updated.
  
  @param mixed      $varData      The data to save in raw data.
  
  @param string     $strLangCode  The language code to save.
  
  @return void
  
  @throws \RuntimeException When an unknown attribute type is encountered.