Подтвердить что ты не робот

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

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

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');
    }
}

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

4b9b3361

Ответ 1

Вам нужно запустить

php artisan migrate:rollback

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

EDIT:

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

Ответ 2

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

php artisan tinker

Тогда

Schema::drop('books')

(и выйти с q)

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

EDIT: (для laravel)

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

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

  • Отбросьте таблицы в базе данных [каждый, включая таблицу миграции]
  • $ composer dump-autoload -o
  • php artisan migrate

Предыдущий комментарий, касающийся просвета

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

Я разрабатываю успокаивающее приложение, использующее просвет, и я новичок в нем. Это мой первый проект/эксперимент с использованием 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 таблица должна существовать в базе данных, или как я должен сохранять элементы!

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

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

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

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

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

Ответ 7

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

Таким образом, это вызвало ошибку "table exists", несмотря на соответствие имени файла и миграции.

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

Ответ 8

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

То, что я сделал для его решения, было ssh в бродяжнике, затем зайдите в MySQL (vagrant ssh, mysql -u homestead -p secret), затем: DROP DATABASE homestead; Then CREATE DATABASE homestead; Then exit mysql and run: php artisan migrate`.

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

Ответ 9

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

php artisan migrate:fresh

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

Ответ 10

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

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

[ErrorException]   (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

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

php artisan make:migration create_articles_table --create=articles

Наконец, я восстановил файл миграции с тем же именем

Ответ 11

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

сделать это

php artisan migrate:refresh

изменить файл миграции

php artisan migrate:rollback

php artisan migrate снова ^ _ ^

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

Ответ 12

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

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

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

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

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

Также попробуйте прочитать question

Ответ 13

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

Ответ 14

php artisan migrate:rollback 

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

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

use Illuminate\Support\Facades\Schema;

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

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

php artisan migrate:fresh

Ответ 15

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

php artisan migrate

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

Ответ 16

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

use Illuminate\Support\Facades\Schema;
public function boot() {
    Schema::defaultStringLength(191);
}

Ответ 17

  • Отбросить всю базу данных таблицы
  • Обновить два файла в папке базы данных/миграции/: 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();
});

Ответ 18

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

Здесь до и после снимков экрана

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

введите описание изображения здесь

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

Ответ 19

  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().

Ответ 20

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

-или -

Перейти на эту страницу в приложении/Провайдеры/AppServiceProvider.php и добавьте код ниже

use Illuminate\Support\Facades\Schema;

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

Ответ 21

Изменить AppServiceProvider.php можно найти в приложении /Providers/AppServiceProvider.php и добавить

use Illuminate\Support\Facades\Schema;

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

Затем запустите

composer update

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

Ответ 22

В файле AppServiceProvider.php добавьте код:

использовать Illuminate\Support\Facades\Schema;

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

В моем случае это помогло Удачи.

Ответ 23

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

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

Ответ 24

Отбросьте всю таблицу базы данных и запустите эту строку в своем пути проекта через CMD

php artisan migrate

Ответ 25

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

Ответ 26

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

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

Ответ 27

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

use Illuminate\Support\Facades\Schema;

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

Schema::defaultStringLength(191);

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

Ответ 28

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

Ответ 29

Решение: Таблица миграции 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

Ответ 30

попробуйте это: php artisan migrate:fresh спасите мой день