hedronium\Jables\Runner::up PHP Method

up() public method

public up ( array $table_names = [], $engine = null, $onerror = null )
$table_names array
    public function up(array $table_names = [], $engine = null, $onerror = null)
    {
        $creator = function (Blueprint $table, $table_name, $definition, $uniques) use($engine) {
            if ($engine) {
                $table->engine = $engine;
            }
            foreach ($definition->fields as $name => $field) {
                if ($name === 'timestamps') {
                    $table->timestamps();
                } elseif ($name === 'soft-deletes') {
                    $table->softDeletes();
                } 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);
        if (!$table_names) {
            $table_names = $this->loader->names();
        }
        $tables = [];
        foreach ($table_names as $name) {
            $definition = $this->loader->get($name);
            if (!$definition) {
                $msg = "table definition for '{$name}' doesn't exist.";
                if ($onerror) {
                    $onerror($msg);
                } else {
                    throw new \Exception($msg);
                }
                continue;
            }
            $tables[$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->setConnection($this->db);
            $builder->create($name, function (Blueprint $table) use($creator, $name, $definition, $uniques) {
                $creator($table, $name, $definition, $uniques);
            });
        }
        $table = $this->app['config']['jables.table'];
        $this->db->table($table)->insert(['type' => 'table', 'data' => json_encode($tables)]);
    }