public function buildLists() { $model = JablesTableModel::orderBy('id', 'desc')->first(); if (!$model) { return false; } $data = json_decode($model->data); foreach ($data as $table_name => $table_definition) { $this->tables[$table_name] = []; if (isset($table_definition->foreign)) { $this->tables[$table_name] = $table_definition->foreign; } foreach ($table_definition->fields as $field_name => $field_definition) { if (isset($field_definition->foreign)) { $this->tables[$table_name][$field_name] = $field_definition->foreign; } } } return true; }
public function up() { $creator = function (Blueprint $table, $table_name, $definition, $uniques) { foreach ($definition->fields as $name => $field) { if ($name === 'timestamps') { $table->timestamps(); } else { $this->field($table, $name, $field); if (isset($field->foreign)) { $this->foreigns[$table_name][$name] = $field->foreign; } } } foreach ($uniques as $unique) { $table->unique($unique); } }; $creator->bindTo($this); foreach ($this->tables as $name => $definition) { $builder = $this->db->getSchemaBuilder(); $this->foreigns[$name] = []; if (isset($definition->foreign)) { $this->foreigns[$name] = (array) $definition->foreign; } $uniques = []; if (isset($definition->unique)) { $uniques = (array) $definition->unique; } $builder->create($name, function (Blueprint $table) use($creator, $name, $definition, $uniques) { $creator($table, $name, $definition, $uniques); }); } $log = new JablesTableModel(); $log->setConnection($this->db->getName()); $log->data = json_encode($this->tables); $log->save(); }