it-swarm.com.ru

Таблица миграции Laravel уже существует, но я хочу добавить новые, а не старые

Я ранее создал таблицу пользователей. Теперь я создал новую миграцию для создания новой таблицы книг внутри моей схемы. Когда я пытаюсь запустить команду

php artisan migrate

Это показывает:  

[Illuminate\Database\QueryException]
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' alre
ady exists (SQL: create table `users` (`id` int unsigned not null auto_incr
ement primary key, `username` varchar(255) not null, `email` varchar(255) n
ot null, `password` varchar(255) not null, `created_at` timestamp default 0
 not null, `updated_at` timestamp default 0 not null) default character set
 utf8 collate utf8_unicode_ci)

Вот моя новая таблица миграции:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateBooksTable extends Migration {
    public function up()
    {
        Schema::create('books', function(Blueprint $table)
        {
            $table->increments('id');
            $table->string('name');
            $table->string('auther');
            $table->string('area');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::drop('books');
    }
}

Как я могу избавиться от ошибки?

48
MD. Atiqur Rahman

Вам нужно бежать

php artisan migrate:rollback

если это также не помогает, просто войдите и отбросьте все таблицы, которые вам, возможно, придется сделать, так как кажется, что ваша таблица миграции испорчена или ваша пользовательская таблица, когда вы выполняли предыдущий откат, не удаляла таблицу.

Правка:

Причина, по которой это происходит, заключается в том, что вы ранее выполнили откат, и в коде произошла ошибка, или таблица не была удалена. Однако это все еще портит таблицу миграции laravel, и, насколько она обеспокоена, у вас теперь нет записей о том, как подтолкнуть пользовательскую таблицу вверх. Однако пользовательская таблица уже существует, и эта ошибка - throw.

39
mschuett

В v5.x вы все еще можете столкнуться с проблемой. Итак, попробуйте сначала удалить связанную таблицу вручную, используя

php artisan tinker

Затем

Schema::drop('books')

(и выйдите с q)

Теперь вы можете успешно php artisan migrate:rollback и php artisan migrate.

Если это происходит неоднократно, вы должны проверить, что метод down() в вашей миграции показывает правильное имя таблицы. (Может быть ошибкой, если вы изменили имена таблиц.)

50
amrography

У меня была такая же проблема. Причина в том, что ваше имя файла в папке миграций не совпадает с именем миграции в вашей базе данных (см. Таблицу миграций). Они должны быть одинаковыми.

25
Abaza

Также вы можете вставить перед Schema::create('books', function(Blueprint $table) следующий код Schema::drop('books');

9
Trikly

Правка: (для Laravel)

Просто сталкивался с этой проблемой во время работы над проектом в laravel. Мои таблицы были испорчены, нужно было часто менять столбцы. Как только таблицы были там, я больше не мог запускать php artisan migrate.

Я сделал следующее, чтобы избавиться от проблемы-

  1. Удалите таблицы из базы данных [все, включая таблицу миграции]
  2. $ composer dump-autoload -o
  3. php artisan migrate

Предыдущий комментарий относительно Люмена

[Ну, довольно поздно на вечеринку (и, возможно, другую вечеринку, чем я искал). Я ударился головой, громко закричал и по милости серого черепа только что нашел решение.]

Я разрабатываю спокойное приложение, используя Lumen, и я новичок в этом. Это мой первый проект/эксперимент с использованием Laraval и Lumen. Мои зависимости-

"require": {
    "php": ">=5.6.4",
    "laravel/Lumen-framework": "5.4.*",
    "vlucas/phpdotenv": "~2.2",
    "barryvdh/laravel-cors": "^0.8.6",
    "league/fractal": "^0.13.0"
},
"require-dev": {
    "fzaninotto/faker": "~1.4",
    "phpunit/phpunit": "~5.0",
    "mockery/mockery": "~0.9.4"
}

Как бы то ни было, до вчерашнего вечера все было хорошо, но внезапно phpunit начал жаловаться на уже существующий стол.

Caused by
PDOException: SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'items' already exists

Duh! Таблица Items должна существовать в базе данных, или как мне сохранить вещи! 

В любом случае проблема сохранялась только в тестовых классах, но, как ни странно, не в браузере (я проверил с помощью chrome, firefox и postman, меняющих заголовки). Я получал ответы JSON с данными, как и ожидалось.

Я удалил базу данных и воссоздал ее с большим количеством migrate, refresh, rollback. Все было хорошо, но в phpunit.

В отчаянии я удалил свои файлы миграции (конечно, сначала я сделал резервную копию), а затем нажал phpunit в терминале. То же самое снова и снова.

Внезапно я вспомнил, что я поместил другое имя базы данных в файл phpunit.xml только для целей тестирования. Я проверил эту базу данных и угадай, что! Была таблица с именем items. Я удалил эту таблицу вручную, запустил phpunit, все стало работать нормально.

Я документирую свой опыт только для будущих ссылок и с надеждой, что это может помочь кому-то в будущем.

7
maksbd19

Я унаследовал какой-то действительно плохой код от кого-то, кто не использовал миграцию!?, Поэтому вручную вставил имена файлов в миграцию, забыв удалить конечный .php

Так что это вызвало ошибку «таблица существует», несмотря на совпадение имени файла и миграции.

2018_05_07_142737_create_users_table.php - НЕПРАВИЛЬНО 2018_05_07_142737_create_users_table - ПРАВИЛЬНО

6
Nik K

Ты можешь использовать php artisan migrate:fresh чтобы удалить все таблицы и затем выполнить миграцию . Надеюсь, это поможет

6
user8810865

У меня была похожая проблема после того, как я возился с ограничениями внешнего ключа. Одна из моих таблиц (заметок) пропала, а одна продолжала возвращаться (задачи) даже после удаления ее в MySQL, что не позволяло мне запустить: php artisan migrate/refresh/reset, что вызвало указанное выше исключение 42s01.

Для решения этой проблемы я использовал ssh в vagrant, затем вошел в MySQL (vagrant ssh, mysql -u Homestead -p secret), затем: DROP DATABASE Homestead; Then CREATE DATABASE Homestead; Then exit mysql and run:php artisan migrate`.

Очевидно, что это решение не будет работать для людей, не использующих vagrant/Homestead . Ни в коем случае не утверждая, что это правильный рабочий процесс, но оно решило мою проблему, которая во многом похожа на приведенную выше. 

4
Martijn van der Bruggen

вы отбрасываете все табели в своей базе данных, затем 

 do this

php artisan migrate:refresh

отредактируйте файл миграции 

php artisan migrate:rollback

php artisan migrate снова ^ _ ^

сделал твой стол !!

3
Fikri Zufri

Я думаю, что мой ответ поможет больше. Я тоже столкнулся с этой ошибкой. Затем я удалил конкретный файл миграции и попытался воссоздать его с помощью php artisan. 

Но прежде чем получить этот пункт 1 или 2 дня назад, когда я смотрел видео о миграции, я думал об откате и перенести конкретную таблицу. По какой-то причине я удалил конкретный файл миграции и попытался воссоздать, но сделал так:

[ErrorException] include (C:\wamp64\www\laraveldeneme\vendor\composer /../../ database/migrations/2017_01_09_082715_create_articles_table.php): не удалось открыть поток: нет такого файла или каталога

Когда я проверял этот файл, я увидел строку внизу вверху массива в файле autoload_classmap.php:

'CreateArticlesTable' => $ BASEDIR./Базы данных/миграции/2017_01_09_083946_create_articles_table.php ',

Несмотря на откат или удаление файла миграции, запись, связанная с файлом миграции, остается в файле autoload_classmap.php составителя. 

Чтобы решить эту проблему, я нашел команду композитора ниже, откуда я не помню.

composer dump-autoload

Когда я запускаю этот код, строка, связанная с удаленным файлом миграции, исчезает. Затем я побежал:

php artisan make:migration create_articles_table --create=articles

Наконец я пересоздал свой миграционный файл с тем же именем

3
Aydın Bulut

перейдите к phpmyadmin и удалите базу данных, которую вы создали для laravel, затем создайте ее снова, затем перейдите в корневой проект cmd (если используете windows) и введите php artisan migrate

2
Silvanas

После отката проверьте ваши таблицы, убедитесь в их удалении.

Если есть проблема, удалите таблицы вручную из приложения базы данных, такого как phpmyadmin (я использую Sequel Pro для Mac).

Исправьте ваши методы при миграции.

Примечание. Выполните откат, затем мигрируйте. Не используйте миграцию: обновите, чтобы увидеть, где была ошибка.

После этого вы можете протестировать с новой базой данных для тестирования. обнаружить, где проблема.

Также попробуйте прочитать это вопрос

2
Hos Mercury
php artisan migrate:rollback 

Проверьте решение: Laravel Официальное решение

Как указано в документе Migrations guide , чтобы исправить это, все, что вам нужно сделать, это отредактировать файл app\Providers\AppServiceProvider.php и в методе загрузки установить длину строки по умолчанию:

use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}

После вышеупомянутой команды вам нужно удалить все оставшиеся таблицы вручную, а затем выполнить команду:

php artisan migrate:fresh
2
flik

Вы можете удалить все таблицы, но это не очень хорошая практика, вместо этого попробуйте эту команду

php artisan migrate:fresh

Убедитесь, что вы правильно используете соглашение об именах. Я проверил это в версии laravel 5.7 Важно не пробовать эту команду, когда ваш сайт находится на сервере, потому что он удаляет всю информацию.

2
Murad

Сначала удалите таблицу пользователей в базе данных. Затем перейдите в командную строку и введите 

php artisan migrate

все наборы. Я думаю, что этот ответ помогает.

1
srilaxmi

Добавьте это к AppServiceProvider.php

use Illuminate\Support\Facades\Schema;
public function boot() {
    Schema::defaultStringLength(191);
}
1
ntsasng
  1. Удалите все таблицы вручную на phpmyadmin.

  2. Перейти к каждому файлу миграции в базе данных/миграции. Найдите и удалите эти 2 кода:

    a) -> index () (находится по адресу 2014_10_12_100000_create_password_resets_table.php в строке 17)

    b) -> unique () (находится по адресу 2014_10_12_000000_create_users_table.php в строке 19)

  3. Запустите "php artisan migrate".

  4. Готово.

Я думаю, это происходит потому, что последний класс laravel (12 февраля 2018 года) удалил функции -> index () и -> unique ().

1
Master Jowin

Я решил вашу проблему, удалив таблицу «user» в sequel-pro (в моей таблице user нет данных), а затем вы можете запустить php artisan migrate

Вот до и после скриншотов

прежде чем удалить пользователя таблицы пользователя

 enter image description here

после того как я удалю таблицу user  enter image description here

1
windtalker
  1. Удалить всю таблицу базы данных
  2. Обновите два файла в папке database/migrations /: 2014_10_12_000000_create_users_table.php, 2014_10_12_100000_create_password_resets_table.php

2014_10_12_100000_create_password_resets_table.php

Schema::create('password_resets', function (Blueprint $table) {
     $table->string('email');
     $table->string('token');
     $table->timestamp('created_at')->nullable();
});

2014_10_12_000000_create_users_table.php

Schema::create('users', function (Blueprint $table) {
     $table->increments('id');
     $table->string('name');
     $table->string('email');
     $table->string('password');
     $table->rememberToken();
     $table->timestamps();
});
1
Jacksonit.org

Я также столкнулся с той же проблемой, я следовал тому же процессу, но моя проблема не решалась, поэтому я пробую другую вещь. Я удалил таблицы из моей базы данных и использовал заголовочный файл 

use Illuminate\Support\Facades\Schema;

и увеличьте длину строки по умолчанию в методе загрузки, чтобы добавить это: -

Schema::defaultStringLength(191);

затем снова мигрировать. Проблема решена, все таблицы созданы в базе данных.

0
Gaurav Jain

В версии 5.4, если у вас возникла эта проблема. Проверить эту ссылку

-или же-

Перейдите на эту страницу в app/Providers/AppServiceProvider.php И добавьте код ниже

use Illuminate\Support\Facades\Schema;

public function boot()
{
Schema::defaultStringLength(191);
}
0
Sameera Liyanage

У меня была такая же проблема, проблема в имени, сохраненном в таблице миграций внутри базы данных, потому что в моей базе данных существует 2017_10_18_200000_name и в файлах 2016_10_18_200000_name, после изменения имени файла, который работает.

0
I.Yan

ОПАСНОСТЬ- большинство из этих ответов сотрут вашу базу данных и не рекомендуются для производственного использования.

Ясно, что есть много «решений» для этой проблемы, но все эти решения, которые я прочитал, являются очень разрушительными, и ни одно из них не работает для производственной базы данных. Исходя из количества решений, также может быть несколько причин этой ошибки.

Моя ошибка была вызвана отсутствующей записью в моей таблице миграции. Я не уверен, как именно это произошло, но, добавив его обратно, я больше не получил ошибку.

0
Jase

Отредактируйте AppServiceProvider.php, чтобы найти его в app/Providers/AppServiceProvider.php и добавить

use Illuminate\Support\Facades\Schema;

public function boot()
{
Schema::defaultStringLength(191);
}

Тогда беги 

composer update

На вашем терминале .... Это помогло мне, может быть, это будет работать и для вас.

0
S.M Talha

Удалите всю таблицу базы данных и запустите эту строку в пути вашего проекта через CMD

php artisan migrate
0
Maijied Hasan Shuvo

У меня тоже была эта проблема, только что наткнулся на этот ответ на Youtube Video . Не уверен, что это идеально, но это лучшее, что я видел.

Появляется файл AppServiceProvider.php каталога провайдеров с указанием длины схемы. В этом случае 191. Работает как по волшебству . Скриншот . Затем он побежал: php artisan migrate:fresh. Надеюсь, это работает.

0
Smitho

Сначала проверьте migrations таблицу в вашей БД и убедитесь, что ваши файлы миграции в папке базы данных в вашем проекте совпадают с данными этой таблицы. Иногда, если вы создаете файлы миграции вручную, эта ошибка появляется при запуске команды migrate в composer.

0
Masoud Rezaei

Вы всегда можете проверить существование таблицы перед ее созданием.

    if(!Schema::hasTable('books')){
 Schema::create('books', function(Blueprint $table)
        {
            $table->increments('id');
            $table->string('name');
            $table->string('auther');
            $table->string('area');
            $table->timestamps();
        });
}
0
Cengkuru Michael

Создание базы данных буквально занимает несколько секунд . Экспортируйте вашу текущую базу данных, если в ней есть конфиденциальные данные . Проверьте ваши миграции и устраните все неправильные методы в ней . Удалите базу данных . Повторно создайте базу данных . php artisan migrate Тогда вы можете вернуть данные ранее в базу данных . Работает !!!

0
Shisha

Решение: Таблица миграции Laravel уже существует ... || Это работает в Laravel 5.8 также

файл app\Providers\AppServiceProvider.php

и внутри метода загрузки установить длину строки по умолчанию:

public function boot()
{
    Schema::defaultStringLength(191);
}

и открыть

config\database.php

'charset' =>'utf8mb4',
'collation' =>'utf8mb4_unicode_ci',

и измените его на

'charset' =>'utf8',
'collation' =>'utf8_unicode_ci',

сохраните все файлы и перейдите в командную строку

php artisan migrate
0
Zaheer Sadique