Проблема с миграцией базы данных Cakephp

#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 это не упоминается должным образом. После долгих поисков я нашел решение в этой статье