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