Таблица 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');
}
}
Как я могу избавиться от ошибки?
Ответы
Ответ 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
-
Отбросьте все таблицы вручную на phpmyadmin.
-
Перейдите в каждый файл миграции в базе данных/миграции. Найдите и удалите эти 2 кода:
a) → index() (найдено в 2014_10_12_100000_create_password_resets_table.php в строке 17)
b) → unique() (найдено в 2014_10_12_000000_create_users_table.php в строке 19)
-
Запустите "php artisan migrate".
-
Готово.
Я думаю, что это происходит потому, что последний класс 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
спасите мой день