#php #mysql #cakephp
#php #mysql #cakephp
Вопрос:
Я пытаюсь создать таблицу, используя миграции базы данных, вот мой код
public function change()
{
$table = $this->table('tags');
$table->addColumn('title', 'string', ['default' => null,'limit' => 255,'null' => false,]);
$table->addColumn('created', 'datetime', ['default' => null,'null' => false,]);
$table->addColumn('modified', 'datetime', ['default' => null,'null' => false,]);
$table->addUniqueKey('title'); // Giving error **Fatal error: Call to undefined method PhinxDbTable::addUniqueKey()**
$table->create();
}
Я хочу установить title
уникальный столбец, но когда я пытаюсь это сделать, он выдает ошибку:
Фатальная ошибка: вызов неопределенного метода Phinx Db Table::addUniqueKey()
Ответ №1:
Добавить ссылку на первичный ключ http://book.cakephp.org/3.0/en/orm/schema-system.html
public function change() {
$t = new Table('posts');
$t->addColumn('id', 'integer')
->addColumn('author_id', 'integer')
->addColumn('title', 'string')
->addColumn('slug', 'string');
// Add a primary key.
$t->addConstraint('primary', [
'type' => 'primary',
'columns' => ['id']
]);
// Add a unique key
$t->addConstraint('slug_idx', [
'columns' => ['slug'],
'type' => 'unique',
]);
// Add index
$t->addIndex('slug_title', [
'columns' => ['slug', 'title'],
'type' => 'index'
]);
// Add a foreign key
$t->addConstraint('author_id_idx', [
'columns' => ['author_id'],
'type' => 'foreign',
'references' => ['authors', 'id'],
'update' => 'cascade',
'delete' => 'cascade'
]);
}
Комментарии:
1. теперь он выдает эту ошибку: «ключ» не является допустимым параметром столбца
2. но опять же я должен сказать, что я хочу установить уникальный ключ, а не первичный ключ. существует огромная разница между обоими
3. я действительно ценю вашу тяжелую работу, но, к сожалению, она все еще не работает, лучше протестировать ваш код перед публикацией
4. пожалуйста, ознакомьтесь с документацией
Ответ №2:
Это должно быть решением
$table->addColumn('title', 'string',
[
'default' => null,
'limit' => 255,
'null' => false,
]);
$table->addIndex(['title'], ['unique' => true]); // < this is what you looking for
Я удивлен, что в документации CakePHP это не упоминается должным образом. После долгих поисков я нашел решение в этой статье