/** * @param \DataObject $object * @param Field $field */ public function write(\DataObject $object, Field $field) { $className = $object->class; // cache has_extension call if (!isset($this->isVersioned[$className])) { $this->isVersioned[$className] = $object->has_extension('Versioned'); } if ($this->isVersioned[$className]) { $args = $field->options; if (!isset($args['publish']) || $args['publish']) { $this->batchWriter->writeToStage($object, 'Stage', 'Live'); } else { $this->batchWriter->writeToStage($object, 'Stage'); } } else { $this->batchWriter->write($object); } $isSeeded = $object->isSeeded(); if (!$isSeeded) { $isRoot = $field->fieldType === Field::FT_ROOT; $dataObjectProperty = $this->dataObjectRecordProperty; $batchWriter = $this->batchWriter; $object->onAfterExistsCallback(function ($object) use($field, $isRoot, $dataObjectProperty, $batchWriter) { $seed = \QuickDataObject::create('SeedRecord'); $objectFields = $dataObjectProperty->getValue($object); $fields = $dataObjectProperty->getValue($seed); $fields['SeedClassName'] = $object->class; $fields['SeedID'] = $objectFields['ID']; $fields['Key'] = $field->key; $fields['Root'] = $isRoot; $dataObjectProperty->setValue($seed, $fields); $batchWriter->write($seed); }); $object->setIsSeeded(); } }
/** * */ public function testWriteManyMany_SetChildrenForParent_RelationWritten() { $parent = new Human(); $parent->Name = 'Bob'; $children = array(); for ($i = 0; $i < 5; $i++) { $child = new Child(); $child->Name = 'Soldier #' . $i; $children[] = $child; } $writer = new \BatchedWriter(); $afterExists = new \OnAfterExists(function () use($writer, $parent, $children) { $writer->writeManyMany($parent, 'Children', $children); }); $afterExists->addCondition($parent); $afterExists->addCondition($children); $writer->write(array($parent)); $writer->write($children); $writer->finish(); $parent = Human::get()->first(); $this->assertEquals(5, $parent->Children()->Count()); }