2016-12-20 15 views
3

지금 Laravel 5.1을 사용 중입니다.Laravel 마이그레이션 클래스에 네임 스페이스가없는 이유는 무엇입니까?

php artisan make:migration create_users_table --create=users 명령에 의해 생성 된 마이그레이션 클래스 파일을 다음과 같이 될 것이다 :

<?php 

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

class CreateUsersTable extends Migration 
{ 
    // up and down ... 
} 

나는, PHP 코드 스니퍼 내 숭고한 텍스트가 아닌 표준을 가리 킵니다이 마이그레이션 클래스 파일을 편집하고 저장하면 메시지는 입니다. '각 클래스는 최소한 하나의 레벨의 네임 스페이스에 있어야합니다'.

나는 [https://laravel.com/docs/5.1/migrations]] 검색 결과와 상위 배치 검색 결과에서 아무런 답변도 얻지 못했습니다. stackoverflow에 관한 관련 질문은 나도 해결하지 못한다.

아무도 이유를 알지 못하거나 어떤 힌트를 주시겠습니까? 감사!

답변

4

기본적으로 디자인의 문제입니다. 네임 스페이스로 마이그레이션하는 사람들이 있습니다. 그러나 마이그레이션이 마이 그 레이션에 의해 마이그레이션 데이터베이스 테이블에로드되고 저장되는 방법은 네임 스페이스를 지정하는 데 문제가 될 수 있습니다. 조금씩 살펴보면 클래스 이름이 마이그레이션 파일 이름의 일부라는 것을 알 수 있으며 Laravel은이 이름을 사용하여 마이그레이션 클래스를 인스턴스화하여 실행해야합니다. 네임 스페이스를 가짐으로써, 예를 들어 동일한 기본 클래스 이름 (클래스 이름에서 네임 스페이스를 뺀)을 가진 2 개의 다른 클래스가 생길 수 있으며, 이는 충돌 할 것이고 찾기가 매우 어려울 수 있습니다. 그에 대한 솔루션은 마이그레이션 파일 이름에 네임 스페이스를 추가하는 것입니다,하지만 그들은 그것을 I가 |을 사용하고 클래스

Database\Migrations\CreateUsersTable 

로 변환 할

2015_12_16_164131_database_migrations|create_users_table.php 

같은 이름을 가질 것 네임 스페이스를 파일 (클래스) 이름과 분리 시키십시오.하지만 모든 것이 이상하게 들릴지 모르겠습니다.

또한 마이 그 레이션을 특정 순서로 실행해야하기 때문에 마이 그 레이션 파일 이름의 시작 부분에 날짜와 타임 스탬프가 필요하므로 그 중 일부입니다.

+0

위에서 언급 한 '솔루션'을 이미 이해하지 못했습니다. 이미 laravel에 의해 구현 되었습니까? 아니면 '마이그레이션 클래스에 네임 스페이스가 있는지'를 설명하는 예제가 있습니까? – cjli