/** * Generates set of code based on data. * * @return array */ public function generate() { $this->prepareData($this->data); $columnFields = ['name', 'description', 'label']; $table = $this->describe->getTable($this->data['name']); foreach ($table as $column) { if ($column->isAutoIncrement()) { continue; } $field = strtolower($column->getField()); $method = 'set_' . $field; $this->data['camel'][$field] = lcfirst(camelize($method)); $this->data['underscore'][$field] = underscore($method); array_push($this->data['columns'], $field); if ($column->isForeignKey()) { $referencedTable = Tools::stripTableSchema($column->getReferencedTable()); $this->data['foreignKeys'][$field] = $referencedTable; array_push($this->data['models'], $referencedTable); $dropdown = ['list' => plural($referencedTable), 'table' => $referencedTable, 'field' => $field]; if (!in_array($field, $columnFields)) { $dropdown['field'] = $this->describe->getPrimaryKey($referencedTable); } array_push($this->data['dropdowns'], $dropdown); } } return $this->data; }
/** * Gets the primary keys based on specified field. * * @param array $data * @param string $field * @param string $referencedTable * @return array */ protected function getPrimaryKey(array $data, $field, $referencedTable) { $accessor = 'get_' . $this->describe->getPrimaryKey($referencedTable); $data['primaryKeys'][$field] = $accessor; if ($data['isCamel']) { $camelized = camelize($data['primaryKeys'][$field]); $data['primaryKeys'][$field] = $camelized; } return $data; }
/** * Generates set of code based on data. * * @return array */ public function generate() { $this->prepareData($this->data); foreach ($this->data['columns'] as $column) { $field = strtolower($column->getField()); $accessor = 'get_' . $field; $mutator = 'set_' . $field; $this->data['camel'][$field] = ['field' => lcfirst(camelize($field)), 'accessor' => lcfirst(camelize($accessor)), 'mutator' => lcfirst(camelize($mutator))]; $this->data['underscore'][$field] = ['field' => lcfirst(underscore($field)), 'accessor' => lcfirst(underscore($accessor)), 'mutator' => lcfirst(underscore($mutator))]; if ($column->isForeignKey()) { $field = $column->getField(); array_push($this->data['indexes'], $field); $this->data['primaryKeys'][$field] = 'get_' . $this->describe->getPrimaryKey($column->getReferencedTable()); if ($this->data['isCamel']) { $this->data['primaryKeys'][$field] = camelize($this->data['primaryKeys'][$field]); } } $column->setReferencedTable(Tools::stripTableSchema($column->getReferencedTable())); } return $this->data; }
/** * Generates set of code based on data. * * @return array */ public function generate() { $this->prepareData($this->data); foreach ($this->data['columns'] as $column) { $field = strtolower($column->getField()); $accessor = 'get_' . $field; $mutator = 'set_' . $field; $this->data['camel'][$field] = ['field' => lcfirst(camelize($field)), 'accessor' => lcfirst(camelize($accessor)), 'mutator' => lcfirst(camelize($mutator))]; $this->data['underscore'][$field] = ['field' => lcfirst(underscore($field)), 'accessor' => lcfirst(underscore($accessor)), 'mutator' => lcfirst(underscore($mutator))]; if ($column->isForeignKey()) { $referencedTable = Tools::stripTableSchema($column->getReferencedTable()); $this->data['foreignKeys'][$field] = plural($referencedTable); $singular = $field . '_singular'; $this->data['foreignKeys'][$singular] = singular($referencedTable); $this->data['primaryKeys'][$field] = 'get_' . $this->describe->getPrimaryKey($referencedTable); if ($this->data['isCamel']) { $this->data['primaryKeys'][$field] = camelize($this->data['primaryKeys'][$field]); } } } return $this->data; }
/** * 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; }