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