/** * インデックスに関わるSQLを構築する * * @param Index $index * @return string */ private function _buildIndexSql(Index $index) { $sql = ''; if ($index->getType() == self::INDEX_UNIQUE) { $sql .= ' UNIQUE'; } elseif ($index->getType() == self::INDEX_FULLTEXT) { $sql .= ' FULLTEXT'; } $sql .= ' KEY'; if (is_string($index->getName())) { $sql .= sprintf(' `%s`', $index->getName()); } // インデックスを付与するカラムを指定する $columns = $index->getColumns(); foreach ($columns as $key => $column) { $limit = is_null($index->getLimit()) ? '' : sprintf('(%s)', $index->getLimit()); $columns[$key] = sprintf('`%s`%s', $column, $limit); } $sql .= sprintf(' (%s)', implode(',', $columns)); return $sql; }
/** * カラムにインデックスを付与する * * @param string|array| $columns * @param array $options * @return Table */ public function addIndex($columns, $options = []) { if (!is_array($columns)) { $columns = [$columns]; } if (isset($options['complex']) && $options['complex'] === true) { $index = new Index(); $index->setColumns($columns); $index->setOptions($options); $this->indexes[] = $index; } else { foreach ($columns as $column) { $index = new Index(); $index->setColumns([$column]); $index->setOptions($options); $this->indexes[] = $index; } } return $this; }