ProductAttributeType::convertArrayToValues PHP Метод

convertArrayToValues() публичный Метод

Finds or creates values for this type.
public convertArrayToValues ( array $values ) : ArrayList
$values array
Результат ArrayList
    public function convertArrayToValues(array $values)
    {
        $set = ArrayList::create();
        foreach ($values as $value) {
            $val = $this->Values()->find('Value', $value);
            if (!$val) {
                //TODO: ignore case, if possible
                $val = ProductAttributeValue::create();
                $val->Value = $value;
                $val->TypeID = $this->ID;
                $val->write();
            }
            $set->push($val);
        }
        return $set;
    }

Usage Example

 /**
  * Generates variations based on selected attributes.
  *
  * @param ProductAttributeType $attributetype
  * @param array $values
  */
 public function generateVariationsFromAttributes(ProductAttributeType $attributetype, array $values)
 {
     //TODO: introduce transactions here, in case objects get half made etc
     //if product has variation attribute types
     if (is_array($values)) {
         //TODO: get values dataobject set
         $avalues = $attributetype->convertArrayToValues($values);
         $existingvariations = $this->owner->Variations();
         if ($existingvariations->exists()) {
             //delete old variation, and create new ones - to prevent modification of exising variations
             foreach ($existingvariations as $oldvariation) {
                 $oldvalues = $oldvariation->AttributeValues();
                 foreach ($avalues as $value) {
                     $newvariation = $oldvariation->duplicate();
                     $newvariation->InternalItemID = $this->owner->InternalItemID . '-' . $newvariation->ID;
                     $newvariation->AttributeValues()->addMany($oldvalues);
                     $newvariation->AttributeValues()->add($value);
                     $newvariation->write();
                     $existingvariations->add($newvariation);
                 }
                 $existingvariations->remove($oldvariation);
                 $oldvariation->AttributeValues()->removeAll();
                 $oldvariation->delete();
                 $oldvariation->destroy();
                 //TODO: check that old variations actually stick around, as they will be needed for past orders etc
             }
         } else {
             foreach ($avalues as $value) {
                 $variation = new ProductVariation();
                 $variation->ProductID = $this->owner->ID;
                 $variation->Price = $this->owner->BasePrice;
                 $variation->write();
                 $variation->InternalItemID = $this->owner->InternalItemID . '-' . $variation->ID;
                 $variation->AttributeValues()->add($value);
                 //TODO: find or create actual value
                 $variation->write();
                 $existingvariations->add($variation);
             }
         }
     }
 }