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');
}
}
어떻게 하면 오류를 없앨 수 있을까요?
v5.x에서도 이 문제에 직면할 수 있습니다.따라서 먼저 다음을 사용하여 관련 테이블을 수동으로 삭제해 보십시오.
php artisan tinker
그리고나서
Schema::drop('books')
( 「 「 」 「 」 )로 종료합니다.q
)
그럼 이제 '나', '나', '나'를 할 수 되었습니다.php artisan migrate:rollback
★★★★★★★★★★★★★★★★★」php artisan migrate
.
으로 발생할 , " " " "가 " "인지 .down()
마이그레이션 방법은 올바른 테이블 이름을 표시하는 것입니다. (테이블 이름을 변경한 경우 gotcha일 수 있습니다.)
뛰어가야 해
php artisan migrate:rollback
이 경우에도 실패할 경우 이행 테이블이 엉망으로 되어 있거나 이전 롤백을 실행했을 때 사용자 테이블이 테이블을 드롭하지 않은 것처럼 보이는 모든 테이블을 드롭합니다.
편집:
이 문제가 발생하는 이유는 이전에 롤백을 실행했는데 코드에 오류가 있거나 테이블을 드롭하지 않았기 때문입니다.그러나 이 경우에도 이행 테이블은 혼란스럽고 사용자 테이블을 위로 밀어올린 기록은 없습니다.그러나 사용자 테이블은 이미 존재하며 이 오류는 느려집니다.
저도 같은 문제가 있었어요.그 이유는 마이그레이션 폴더의 파일 이름이 데이터베이스의 마이그레이션 이름과 일치하지 않기 때문입니다(이행 표 참조).둘 다 똑같아야 해요.
하시면 됩니다.php artisan migrate:fresh
모든 테이블을 폐기하고 이행합니다.이 되었으면
할 수도 있습니다.Schema::create('books', function(Blueprint $table)
코드Schema::drop('books');
편집: (라벨용)
라라벨에서 프로젝트를 진행하던 중 이 문제를 발견했습니다.테이블이 엉망이어서 칼럼을 자주 바꿔야 했습니다.는 뛰지 php artisan migrate
★★★★★★★★★★★★★★★★★★.
이 문제를 없애기 위해 팔로잉을 했어요
- 데이터베이스(이행 테이블 포함) 내의 테이블을 모두 삭제합니다.
$ composer dump-autoload -o
php artisan migrate
이전 코멘트, 내강 관련
[글쎄요, 파티에 꽤 늦었네요(그리고 아마 제가 찾던 파티와는 다른 파티일 수도 있어요)]나는 머리를 부딪치고 소리를 질렀고 회색 해골의 은총으로 해결책을 찾았다.]
루멘을 사용하여 편안한 앱을 개발 중인데 처음 접하게 되었습니다.라라발과 루멘을 사용한 첫 프로젝트/실험입니다.나의 의존관계는-
"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
으악!Items
테이블이 데이터베이스에 있어야 합니다.그렇지 않으면 아이템을 저장하는 방법을 알려주세요!
어쨌든 이 문제는 테스트 클래스에서만 지속되고 브라우저에서는 이상하게도 발생하지 않았습니다(크롬, 파이어폭스, 우체부 변경 헤더를 확인했습니다).예상대로 JSON의 답변을 받고 있었습니다.
했습니다.migrate
,refresh
,rollback
모든 게 괜찮았지만phpunit
.
먼저 백업을 ), 「」를 눌렀습니다.phpunit
터미널에 있습니다.★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
문득 다른 .phpunit.xml
파일링(테스트 전용)을 참조해 주세요.내가 그 데이터베이스를 확인해봤는데, 그거 알아?이름이 붙은 테이블이 있었다.items
를 수동으로해서 실행해 보겠습니다.phpunit
모든 게 잘 돌아가기 시작했어요
향후 참고용으로만 제 경험을 기록하고 있으며, 이것이 미래에 누군가에게 도움이 될 수 있다는 희망을 가지고 있습니다.
마이그레이션을 사용하지 않는 사람으로부터 정말 나쁜 코드를 물려받았습니다!?그래서 파일명을 수동으로 이행에 붙여 넣었습니다.후행 .php를 삭제하는 것을 잊었습니다.
따라서 파일 이름과 마이그레이션이 일치하더라도 'table exists' 오류가 발생했습니다.
2018_05_07_142737_create_users_table.php - WRIGH 2018_05_07_142737_create_users_table - 정답
모든 테이블을 삭제할 수는 있지만 좋은 방법은 아닙니다. 대신 이 명령을 사용해 보십시오.
php artisan migrate:fresh
명명 규칙을 올바르게 사용해야 합니다.버전 5.7에서 테스트한 적이 있습니다.사이트가 서버에 있을 때는 이 명령어를 사용하지 않는 것이 중요합니다.이것은 모든 정보를 폐기하기 때문입니다.
외국 키 제약 조건을 건드린 후 비슷한 문제가 발생했습니다.중가 계속 이 방해되고 있습니다.MySQL에서 실행할 수 .php artisan migrate/refresh/reset
42s01이라고 합니다.
에 넣은 후 MySQLssh ssh vagrant)에했습니다.vagrant ssh, mysql -u homestead -p secret
、 、 ), :DROP DATABASE homestead; Then CREATE DATABASE homestead; Then exit mysql and run:
php "Ph" 입니다.
분명 이 솔루션은 부랑자/홈스테드를 사용하지 않는 사람들에게는 효과가 없습니다.어떤 식으로든 이것이 적절한 작업 흐름이라고 주장하지 않았지만, 위와 유사한 나의 문제를 해결했습니다.
데이터베이스 내의 모든 탭을 드롭합니다.
php artisan migrate:refresh
마이그레이션 파일 편집
php artisan migrate:rollback
php artisan migrate
하다 ^_^
테이블 다 했어!!
위험 - 이들 답변의 대부분은 데이터베이스를 삭제하므로 실제 가동에서는 사용하지 않는 것이 좋습니다.
이 문제에 대한 "솔루션"이 많이 있는 것은 분명하지만, 제가 읽은 모든 솔루션은 매우 파괴적인 솔루션이며, 운영 데이터베이스에는 모두 해당되지 않습니다.솔루션의 수에 따라서는, 이 에러의 원인도 몇개인가 생각할 수 있습니다.
이행테이블에 엔트리가 없기 때문에 에러가 발생했습니다.어떻게 된 일인지 정확히 알 수 없지만 에 다시 추가함으로써 에러가 발생하지 않게 되었습니다.
제 답변이 더 도움이 될 것 같아요.저도 이 오류에 직면했어요.그런 다음 특정 마이그레이션 파일을 삭제하고 php 장인이 다시 작성하려고 했습니다.
그러나 1~2일 전 마이그레이션에 대한 Laracast 비디오를 보면서 이 점을 깨닫기 전에 특정 테이블을 롤백하고 마이그레이션하는 것을 생각하고 있었습니다.어떤 이유로 특정 이행파일을 삭제하고 다시 작성하려고 했지만 다음 메시지가 나타납니다.
[ErrorException] include (C:\wamp64\www\laraveldeneme\vendor\composer/../database/migrations/2017_01_09_082715_create_articles_table.php): 스트림을 열지 못했습니다.해당 파일 또는 디렉터리가 없습니다.
그 파일을 확인했을 때 autoload_classmap의 어레이 상단에 다음 행이 있습니다.php 파일:
'CreateArticlesTable'=>$baseDir.'/database/migrations/2017_01_09_083946_create_articles_table.php',
마이그레이션 파일을 롤백하거나 삭제하더라도 마이그레이션 파일과 관련된 레코드는 composer autoload_classmap에 남아 있습니다.php 파일.
이 문제를 해결하기 위해 기억나지 않는 곳에서 아래 composer 명령어를 찾았습니다.
composer dump-autoload
이 코드를 실행하면 삭제한 이행 파일과 관련된 행이 없어집니다.그리고 뛰었습니다.
php artisan make:migration create_articles_table --create=articles
마지막으로 이행 파일을 같은 이름으로 재작성했습니다.
phpmyadmin으로 이동하여 larabel용으로 작성한 데이터베이스를 삭제한 후 다시 작성한 후 cmd(Windows를 사용하는 경우) 루트 프로젝트로 이동하여 php artisan migrate를 입력합니다.
테이블을 작성하기 전에 항상 테이블 존재 여부를 확인할 수 있습니다.
if(!Schema::hasTable('books')){
Schema::create('books', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
$table->string('auther');
$table->string('area');
$table->timestamps();
});
}
php artisan migrate:rollback
솔루션 확인: Larabel 공식 솔루션
이 문제를 해결하려면 이행 가이드에 설명된 대로 앱\Providers\AppServiceProvider.php 파일을 편집하고 부트 메서드 내에서 기본 문자열 길이를 설정하기만 하면 됩니다.
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
위의 명령어 후 나머지 테이블을 모두 수동으로 삭제한 후 다음 명령을 실행해야 합니다.
php artisan migrate:fresh
아직 답을 찾고 있는 사용자는 이행이 이미 실행된 이행 중 하나를 실행하려고 할 때(따라서 "Table are exists" 문제) 다음 절차를 따르기만 하면 됩니다.
- 문제의 원인이 되는 테이블의 PHP 파일을 열고 "up()" 함수의 모든 코드를 코멘트 아웃합니다.
- "php 장인 마이그레이션"을 다시 실행합니다.문제의 원인이 되고 있는 파일/테이블은 빈 기능으로 처리됩니다.
이행은 새로운 대기 이행으로 넘어갑니다.완료되면 이전에 코멘트한 행의 코멘트를 해제합니다(옵션이지만 다른 개발자에게 혼란을 주지 않도록 권장합니다).
롤백 후 테이블을 확인합니다.삭제를 확인합니다.
phpmyadmin과 같은 데이터베이스 응용 프로그램에서 수동으로 테이블을 삭제하는 데 문제가 있는 경우(저는 mac용 success from을 사용하고 있습니다).
이행의 다운 방식을 수정합니다.
주의: 롤백을 한 후 이행합니다.오류가 발생한 위치를 확인하려면 migrate:refresh를 사용하지 마십시오.
그 후 테스트를 위해 새로운 db를 사용하여 테스트할 수 있습니다.어디서 문제가 발생하고 있는지를 검출하기 위해서입니다.
이 질문도 읽어보세요.
AppServiceProvider에 추가합니다.php
use Illuminate\Support\Facades\Schema;
public function boot() {
Schema::defaultStringLength(191);
}
- 모든 테이블 데이터베이스 삭제
- 폴더 데이터베이스/이행/: 2014_10_12_0000_create_users_table에서 두 파일을 업데이트합니다.php, 2014_10_12_100000_create_password_table.php
2014_10_12_100000_create_password_table.php
Schema::create('password_resets', function (Blueprint $table) {
$table->string('email');
$table->string('token');
$table->timestamp('created_at')->nullable();
});
2014_10_12_0000_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();
});
가 없음)을하고 success-pro "user"를 실행하면 할 수 . 그러면 실행할 수 있습니다.php artisan migrate
여기 스크린샷 전후가 있습니다.
사용자 테이블 사용자를 삭제하기 전에
테이블 사용자를 삭제한 후
phpmyadmin에서 모든 테이블을 수동으로 드롭합니다.
다음 각 마이그레이션 파일로 이동합니다.
database/migrations
이 두 코드를a) ->index() (2014_10_12_100000_create_password_password_table에 있습니다).17행의 php)
b) -> users() (2014_10_12_0000_create_users_table에 있습니다).19행의 php)
달려.
php artisan migrate
다 했어요.
가장 최근의 laravel class(2018년 2월 12일)가 다음 기능을 제거했기 때문에 이러한 현상이 발생한다고 생각합니다.->index()
그리고.->unique()
작성에 실패한 테이블을 삭제해야 하는 경우 매우 귀찮습니다.그래서 새 테이블을 만들기 전에 테이블이 있는 경우 dropIfExists('table_name') 기능을 사용하여 테이블을 삭제합니다.
Schema::dropIfExists('books');
Schema::create('books', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
$table->string('auther');
$table->string('area');
$table->timestamps();
});
먼저 사용자 테이블을 데이터베이스에서 삭제합니다.그런 다음 명령어프로파트로 이동하여
php artisan migrate
모든 세트이 대답이 도움이 될 것 같아요.
larabel 5.4에서는 이 문제가 발생하고 있는 경우. 이 링크를 확인합니다.
-혹은...
App/Providers/AppServiceProvider의 이 페이지로 이동합니다.php 및 아래에 코드를 추가합니다.
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
저도 이런 문제가 있었는데, 방금 유튜브 비디오에서 이 답을 발견했어요.이상적일지는 모르겠지만, 내가 본 것 중에 최고야.
보아하니AppServiceProvider.php
[ Schema ]에 길이를 지정하여 공급자디렉토리의 파일을 지정합니다.이 경우191
마법처럼 작동한다.스크린샷.그리고 그는 도망쳤다:php artisan migrate:fresh
이게 먹히길 바라.
먼저 DB의 마이그레이션 테이블을 확인하고 프로젝트의 데이터베이스 폴더에 있는 마이그레이션 파일이 이 테이블 데이터와 동일한지 확인하십시오.수동으로 마이그레이션 파일을 생성하는 경우 작곡기에서 마이그레이션 명령을 실행할 때 이 오류가 나타날 수 있습니다.
해결책: Laravel 마이그레이션 테이블이 이미 있습니다...|| Larabel 5.8에서도 동작합니다.
app\Providers\AppServiceProvider.php 파일
부트 방식 내부에서는 기본 문자열 길이를 설정합니다.
public function boot()
{
Schema::defaultStringLength(191);
}
를 엽니다.
config\filength 를 클릭합니다.php
'charset' =>'utf8mb4',
'collation' =>'utf8mb4_unicode_ci',
로 변경해 주세요.
'charset' =>'utf8',
'collation' =>'utf8_unicode_ci',
모든 파일을 저장하고 명령 프롬프트로 이동합니다.
php artisan migrate
답은 매우 간단합니다.
먼저 폴더 부트스트랩/캐시를 백업합니다.
그런 다음 부트스트랩/캐시 폴더에서 모든 파일을 삭제합니다.
지금 실행:
php artisan migrate
데이터베이스 작성에는 말 그대로 몇 초가 걸립니다.
중요한 데이터가 있는 경우 현재 데이터베이스를 내보냅니다.
마이그레이션을 확인하고 마이그레이션에서 잘못된 방법을 모두 제거하십시오.
데이터베이스를 삭제하고 데이터베이스를 다시 만듭니다.
php artisan migrate
그런 다음 이전에 데이터베이스에 있던 데이터를 반환할 수 있습니다.
저도 같은 문제에 직면했기 때문에 같은 절차를 밟았지만 문제가 해결되지 않아 다른 방법을 시도합니다.데이터베이스에서 테이블을 삭제하고 헤더 파일을 사용합니다.
use Illuminate\Support\Facades\Schema;
디폴트 문자열 길이를 늘립니다.boot
가가: :
Schema::defaultStringLength(191);
php artisan migrate
테이블이 에 생성됩니다. 문제가 해결되어 모든 테이블이 데이터베이스에 생성됩니다.
언급URL : https://stackoverflow.com/questions/26077458/laravel-migration-table-already-exists-but-i-want-to-add-new-not-the-older
'programing' 카테고리의 다른 글
Android 앱이 온라인 mysql 데이터베이스에 직접 연결할 수 있습니까? (0) | 2022.09.23 |
---|---|
Node.js에서 다른 파일의 함수를 "포함"하려면 어떻게 해야 합니까? (0) | 2022.09.23 |
익명 함수를 매개 변수로 사용하여 외부 변수 액세스 (0) | 2022.09.23 |
팬더: 지정된 열에 대한 데이터 프레임 행의 합계 (0) | 2022.09.23 |
저장된 CSV에 Python/Pandas가 인덱스를 생성하지 않도록 하려면 어떻게 해야 합니까? (0) | 2022.09.23 |