/** * Create set of options to specify missing relation definition fields. * * @return array */ protected function proposedDefinitions() { $options = ['name' => $this->name, 'name:plural' => Inflector::pluralize($this->name), 'name:singular' => Inflector::singularize($this->name), 'record:role' => $this->record->getRole(), 'record:table' => $this->record->getTable(), 'record:primaryKey' => $this->record->getPrimaryKey()]; //Some options may use values declared in other definition fields $proposed = [RecordEntity::OUTER_KEY => 'outerKey', RecordEntity::INNER_KEY => 'innerKey', RecordEntity::PIVOT_TABLE => 'pivotTable']; foreach ($proposed as $property => $alias) { if (isset($this->definition[$property])) { //Let's create some default options based on user specified values $options['definition:' . $alias] = $this->definition[$property]; } } if ($this->builder->hasRecord($this->target)) { $options = $options + ['outer:role' => $this->outerRecord()->getRole(), 'outer:table' => $this->outerRecord()->getTable(), 'outer:primaryKey' => $this->outerRecord()->getPrimaryKey()]; } return $options; }