Я ранее создал таблицу пользователей. Теперь я создал новую миграцию, чтобы создать новую таблицу книг внутри моей схемы. Когда я пытаюсь запустить команду
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'); } }
Как я могу избавиться от ошибки?
Вам нужно запустить
php artisan migrate:rollback
если это также не сработает, просто зайдите и отбросьте все таблицы, которые вам, возможно, придется делать, поскольку кажется, что ваша таблица миграции перепутана, или ваша пользовательская таблица при предыдущем откате не отбросила таблицу.
РЕДАКТИРОВАТЬ:
Причина этого заключается в том, что раньше вы выполняли откат, и у него была некоторая ошибка в коде или не выпадала из таблицы. Тем не менее, это все-таки путается с таблицей миграции laravel, и, насколько это известно, у вас нет записей о том, как подтолкнуть таблицу пользователя. Пользовательская таблица уже существует, и эта ошибка выбрасывается.
В версии v5.x вы все еще можете столкнуться с проблемой. Итак, сначала попробуйте вручную удалить связанную таблицу
php artisan tinker
затем
Schema::drop('books')
(и выход с q
)
Теперь вы можете успешно php artisan migrate:rollback
и php artisan migrate
.
Если это происходит неоднократно, вы должны проверить, что метод down()
в вашей миграции показывает правильное имя таблицы. (Может быть получено, если вы изменили имена таблиц.)
У меня были такие же проблемы. Причина в том, что ваше имя файла в папке миграции не совпадает с именем миграции в вашей базе данных (см. Таблицу миграции). Они должны быть одинаковыми.
Также u может вставить forfor Schema::create('books', function(Blueprint $table)
следующий код Schema::drop('books');
У меня была аналогичная проблема после возиться с ограничениями внешнего ключа. Одна из моих таблиц (заметок) исчезла, и каждый возвращался назад (задачи) даже после того, как сбросил ее в 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:
DROP DATABASE homestead; Then CREATE DATABASE homestead; Then exit mysql and run:
DROP DATABASE homestead; Then CREATE DATABASE homestead; Then exit mysql and run:
php artisan migrate`.
Очевидно, что это решение не будет работать для людей, не использующих бродягу / усадьбу. Не претендуя на то, что это правильный рабочий процесс, но он решил мою проблему, которая очень похожа на предыдущую.
Я унаследовал какой-то настоящий плохой код от кого-то, кто не использовал миграции!?, Поэтому вручную вставлял имена файлов в миграции, забывая удалить конечный .php
Таким образом, возникла ошибка «table exists», несмотря на совпадение имени файла и миграции.
2018_05_07_142737_create_users_table.php – WRONG 2018_05_07_142737_create_users_table – ПРАВИЛЬНО
вы удаляете все табуляции в своей базе данных, затем
php artisan migrate:refresh
отредактируйте файл миграции
php artisan migrate:rollback
php artisan migrate
снова php artisan migrate
^ _ ^
сделал ваш стол !!
Я думаю, что мой ответ поможет больше. Я тоже столкнулся с этой ошибкой. Затем я удалил конкретный файл миграции и попытался воссоздать 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 ',
При удалении или удалении файла миграции запись, связанная с файлом миграции, сохраняется в файле автозагрузки автозагрузки_classmap.php.
Чтобы решить эту проблему, я нашел команду композитора ниже, откуда-то я не могу вспомнить.
composer dump-autoload
Когда я rand этот код, строка, связанная с файлом миграции, который я удалил, исчез. Затем я побежал:
php artisan make:migration create_articles_table --create=articles
Наконец, я воссоздал файл миграции с тем же именем
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
, все началось нормально.
Я документирую свой опыт только для будущих ссылок и надеюсь, что это может помочь кому-то в будущем.
После отката проверьте свои таблицы, убедитесь в удалении.
Если есть проблема, удалите таблицы вручную из приложения базы данных, например phpmyadmin (я использую сиквел pro для mac).
Исправьте свои методы вниз в процессе миграции.
Примечание. Затем выполните откат, а затем выполните миграцию. Не используйте migrate: refresh, чтобы заметить, где была ошибка.
После этого вы можете протестировать новый db для тестирования. чтобы определить, где проблема.
Также попробуйте прочитать этот вопрос
перейдите в phpmyadmin и отбросьте базу данных, которую вы создали для laravel, затем создайте ее снова, затем перейдите в cmd (if use windows) root project и введите php artisan migrate
Сначала запустите таблицу пользователей в базе данных. Затем перейдите в команду propmt и введите
php artisan migrate
все наборы. Я думаю, что этот ответ помогает.
Добавьте это в AppServiceProvider.php
use Illuminate\Support\Facades\Schema; public function boot() { Schema::defaultStringLength(191); }
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(); });
В файле AppServiceProvider.php добавьте код:
public function boot() { Schema::defaultStringLength(191); }
В моем случае это помогло удачи
В laravel 5.4, Если у вас возникла эта проблема. Проверить эту ссылку
-или-
Перейдите на эту страницу в app / Providers / AppServiceProvider.php и добавьте код ниже
use Illuminate\Support\Facades\Schema; public function boot() { Schema::defaultStringLength(191); }
Редактировать AppServiceProvider.php можно найти в приложении / Providers / AppServiceProvider.php и добавить
use Illuminate\Support\Facades\Schema; public function boot() { Schema::defaultStringLength(191); }
Затем запустите
composer update
На вашем терминале. Это помогло мне, возможно, это сработает и для вас.
Я решил вашу проблему, удалив таблицу «user» в файле sequel-pro (в моей таблице пользователя нет данных), а затем вы можете запустить php artisan migrate
Вот до и после скриншотов
перед удалением пользователя пользовательской таблицы
после удаления пользователя таблицы