/** * Sets the foreign field of the column, if any. * * @param \CI_Model $model * @param \Rougin\Describe\Column $column * @param array $properties * @return void */ protected function setForeignField(\CI_Model $model, Column $column, array $properties) { $columnName = $column->getField(); $foreignColumn = $column->getReferencedField(); $foreignTable = $column->getReferencedTable(); if (in_array($foreignTable, $properties['belongs_to'])) { $delimiters = [$foreignColumn => $model->{$columnName}]; $foreign = $this->find($foreignTable, $delimiters); if (is_object($foreign)) { $tableName = TableHelper::getNameFromModel($foreign); $model->{$tableName} = $foreign; } } }
/** * Sets specified fields for foreign key values. * * @param \Rougin\Describe\Column $column */ public function setForeignKey(Column $column, array &$data, array &$keywords) { if (!$column->isForeignKey()) { return; } $config = Configuration::get(); $template = $this->foreignColumnTemplate; $data['methods'] .= "\n " . $this->mutatorMethodTemplate . "\n "; $data['methods'] .= $this->accessorMethodTemplate; $referencedTable = $this->stripTableSchema($column->getReferencedTable()); $keywords['{accessorName}'] = Inflector::camelize('get_' . $referencedTable); $keywords['{mutatorName}'] = Inflector::camelize('set_' . $referencedTable); $keywords['{primaryKey}'] = $this->describe->getPrimaryKey($referencedTable); $keywords['{variable}'] = $referencedTable; $keywords['{referencedTable}'] = ucfirst($referencedTable); $keywords['{description}'] = $referencedTable; $keywords['{class}'] = ucfirst($referencedTable) . ' '; $keywords['{datatype}'] = '\\' . $config->application->name . '\\' . $config->namespaces->models . '\\' . ucfirst($referencedTable); $template = str_replace(array_keys($keywords), array_values($keywords), $template); $data['methods'] = str_replace(array_keys($keywords), array_values($keywords), $data['methods']); $data['columns'] .= $template; }