protected function processForeignKeys() { /** @var ForeignKey[] $beforeForeignKeys */ $beforeForeignKeys = array(); if (!$this->before->disableForeignKeys) { foreach ($this->before->getForeignKeys() as $foreignKey) { $beforeForeignKeys[$foreignKey->getName()] = $foreignKey; } } $afterForeignKeys = $this->after->getForeignKeys(); if ($this->after->disableForeignKeys) { $afterForeignKeys = array(); } foreach ($afterForeignKeys as $foreignKey) { if (!isset($beforeForeignKeys[$foreignKey->getName()])) { $this->addFkExpression->commaExpr('ADD'); $this->addFkExpression->appendExpr($this->database()->getUtility()->generateForeignKeyExpression($foreignKey)); } else { unset($beforeForeignKeys[$foreignKey->getName()]); } } foreach ($beforeForeignKeys as $foreignKey) { $this->alterLines->commaExpr('DROP FOREIGN KEY ?', new Symbol($foreignKey->getName())); } }
public function __construct(Table $table) { $this->table = $table; $this->bindDatabase($table->database()); $this->createLines = new SimpleExpression(); $this->createLines->setOpComma(',' . PHP_EOL); $this->fkLines = new SimpleExpression(); $this->fkLines->setOpComma(',' . PHP_EOL); $createExpression = new SimpleExpression('CREATE TABLE ? (' . PHP_EOL, $this->table); $this->add($createExpression); $createExpression->appendExpr($this->createLines); $createExpression->appendExpr(PHP_EOL . ')'); $this->appendColumns(); $this->appendIndexes(); $this->createLines->commaExpr($this->fkLines); $this->appendForeignKeys(); $this->appendPrimaryKey(); if ($this->createLines->isEmpty()) { $createExpression->disable(); } }
public function set($expression, $binds = null) { if (null === $expression) { return $this; } if (is_array($expression)) { $expressionString = ''; $bindsArray = array(); if (is_string($binds)) { $table = $binds; } else { $table = null; } foreach ($expression as $key => $value) { $expressionString .= '? = ?, '; $bindsArray[] = new Symbol($table, $key); $bindsArray[] = $value; } $expressionString = substr($expressionString, 0, -2); $expression = new SimpleExpression($expressionString, $bindsArray); } else { $expression = SimpleExpression::createFromFuncArguments(func_get_args()); } if (null === $this->set) { $this->set = $expression; } else { $this->set->commaExpr($expression); } return $this; }