示例#1
0
 /**
  * Generates and adds fake data for a ReferenceField on a document.
  *
  * @param IDocument $document an instance of the document to fill with fake data.
  * @param IField $field an instance of the ReferenceField to fill with fake data.
  * @param array $options array of options to customize fake data creation.
  *
  * @return void
  */
 protected function addReference(IDocument $document, IField $field, array $options = array())
 {
     $recursion_level = 1;
     if (!empty($options[self::OPTION_RECURSION_LEVEL]) && is_int($options[self::OPTION_RECURSION_LEVEL])) {
         $recursion_level = $options[self::OPTION_RECURSION_LEVEL];
     }
     if ($recursion_level > 1) {
         return;
     }
     $options_clone = $options;
     $options_clone[self::OPTION_RECURSION_LEVEL] = $recursion_level + 1;
     $referencedModules = $field->getReferencedModules();
     $collection = $field->getDefaultValue();
     $numberOfReferencedModules = count($referencedModules);
     $numberOfNewReferenceEntries = $this->faker->numberBetween(1, 3);
     // add number of documents to reference depending on number of referenced modules
     for ($i = 0; $i < $numberOfReferencedModules; $i++) {
         $numberOfNewReferenceEntries += $this->faker->numberBetween(0, 3);
     }
     // add new documents to collection for referenced modules
     for ($i = 0; $i < $numberOfNewReferenceEntries; $i++) {
         $ref_module = $this->faker->randomElement($referencedModules);
         $new_document = $this->createFakeDocument($ref_module, $options_clone);
         $collection->add($new_document);
     }
     $this->setValue($document, $field, $collection, $options);
 }