본문 바로가기
Back-End Developer/[WEB] 각종 에러 해결 및 잡지식

Laravel에서 Eloquent 모델과 데이터베이스 테이블의 이름 일치시키기

by Max007 2024. 3. 14.
728x90

소개: Laravel은 PHP 개발을 위한 강력한 프레임워크로, Eloquent ORM을 통해 데이터베이스와의 상호 작용을 간소화합니다. 그러나 때로는 Eloquent 모델과 데이터베이스 테이블 간의 이름이 일치하지 않아 문제가 발생할 수 있습니다. 이 글에서는 이러한 문제가 발생하는 이유와 해결 방법에 대해 알아보겠습니다.

문제 상황: 가령, Laravel에서 make:model 명령어를 사용하여 모델을 생성할 때, 해당 모델과 연결된 테이블은 기본적으로 복수형으로 끝나는 이름을 가집니다. 예를 들어, Flight 모델은 flights 테이블과 매핑됩니다. 하지만 때로는 개발자가 이러한 기본 규칙을 따르지 않고 테이블을 생성할 수 있습니다. 이 때문에 모델과 테이블 간의 이름이 일치하지 않는 상황이 발생할 수 있습니다.

원인: Eloquent 모델과 테이블 간의 이름 불일치는 주로 개발자가 모델을 생성할 때 사용한 명령에 의해 발생합니다. 모델명과 테이블명이 일치하지 않으면 Laravel은 예상한 테이블 대신 잘못된 테이블을 참조하려고 하게 됩니다. 이로 인해 데이터베이스 쿼리가 실패하고 오류가 발생합니다.

 

  ./vendor/bin/sail artisan make:migration CreateArticlesTable
  
  
  public function up(): void
    {
        Schema::create('articles', function (Blueprint $table) {
            $table->id();
            $table->string('body', 255);
            $table->string('user_id')->index();
            $table->timestamps();
        });
    }

 

처음부터 테이블을 만들때 단수모델에 복수 테이블을 만들어야합니다. 이게 라라벨 기본 규칙입니다.

 

불가피하게 모델명과 테이블명의 규칙을 따르기 어려울 시 아래와 같이 해결합니다.

 

해결 방법: 이 문제를 해결하려면 두 가지 주요 방법이 있습니다. 첫 번째로는 Eloquent 모델의 $table 속성을 사용하여 테이블 이름을 명시적으로 지정하는 것입니다. 두 번째로는 모델명을 복수형으로 지정하여 Laravel의 기본 규칙을 따르는 것입니다.

해결 방법 1: $table 속성 사용 다음은 Article 모델에서 $table 속성을 사용하여 테이블 이름을 명시적으로 지정하는 예제입니다.

 

해결 방법 2: 모델명을 복수형으로 지정

만약 Article 모델과 연결된 테이블이 articles인 경우, 모델명을 복수형으로 지정하여 Laravel의 기본 규칙을 따르는 것이 더 간편할 수 있습니다. 따라서 Article 모델을 다음과 같이 정의할 수 있습니다.

./vendor/bin/sail artisan make:model Article


// 또는 테이블 속성을 모델에서 지정하기
    protected $table = 'articles';

위 예제에서는 Article 모델이 articles 테이블과 연결되도록 설정되었습니다. 이제 Article::find(9)와 같은 쿼리를 실행하면 올바른 테이블에서 데이터를 찾을 수 있습니다.

 

이제 Articles::find(9)와 같은 쿼리를 실행하면 Laravel은 자동으로 articles 테이블을 참조하게 됩니다.

결론: 이렇게 해서 Laravel의 Eloquent 모델과 데이터베이스 테이블 간의 이름 일치 문제를 해결할 수 있습니다. 개발자가 모델을 생성할 때 주의하여 모델명과 테이블명을 일치시키거나, 명시적으로 테이블 이름을 지정하는 것이 중요합니다. 이를 통해 데이터베이스와의 상호 작용이 원활하게 이루어지고, 오류를 최소화할 수 있습니다.

 

728x90