2014-09-19 2 views
23

나는 내 데이터에 액세스하기 위해 laravel eloquent 데이터 개체를 사용하고 있는데, 내 테이블, 열, 외래 키/기본 키 등의 이름을 지정하는 가장 좋은 방법은 무엇입니까?Laravel - 데이터베이스, 테이블 및 열 이름 지정 규칙?

많은 명명 규칙이 있습니다. 나는 laravel eloquent 모델에 가장 적합한 모델이 무엇인지 궁금 할뿐입니다. (- 포스트 테이블에 사용자 ID userId를 예)

  • 카멜 케이스 :

    1. 단수 테이블 이름 (예 : 포스트)
    2. 단수 열 이름 난 명명 규칙을 다음으로 생각하고

      (: PostComment, PostReview, PostPhoto 예) 열에 이름 여러 단어

    3. 카멜 케이싱 (예 : firstName을, postCategoryId, postPhotoId)
    012 표 이름 여러 단어

    이렇게하면 컨트롤러에서 비슷한 구문을 사용할 수 있습니다.

    $result = Post::where('postCategoryId', '4')->get(); 
    

    권장되는 Laravel 가이드 라인이 있습니까? 이러한 명명 규칙을 계속 진행할 수 있습니까?

    누군가가 더 좋은 제안을하면, 나는 그 (것)들을 듣게 아주 행복 할 것이다. 많이 감사합니다!

  • +1

    필요에 따라 사용할 수 있습니다. 하지만 문제는 관계의 경우에 자동으로 사용되도록 적절하게 정의하는 것입니다. –

    답변

    26

    Laravel 자체 명명 규칙이 있습니다. 예를 들어, 모델 이름이 User.php 인 경우 Laravel은 'User'클래스가 해당 파일에 포함될 것으로 기대합니다. 그것은 User 모델에 대한 users 테이블을 기대합니다. 우리는 우리의 사용자 모델에 사용할 테이블 설득력을 말하지 않았다

    참고 : 그러나, 당신은 Laravel 공식 문서에서

    class User extends Eloquent implements UserInterface, RemindableInterface { 
         protected $table = 'user'; 
        } 
    

    , 같은 모델에 테이블 속성을 정의하여이 규칙을 재정의 할 수 있습니다 . 다른 이름을 명시 적으로 지정하지 않으면 클래스의 소문자, 복수 이름이 테이블 이름 으로 사용됩니다. 따라서이 경우 Eloquent 은 사용자 모델이 사용자 테이블에 레코드를 저장한다고 가정합니다. 당신이 다음 외래 키로 다른 테이블에있는 사용자 테이블 ID를 사용할 경우, 할 수 있도록 user_id 같은 뱀의 경우이어야한다

    당신은 당신의 모델에 $table 속성을 정의하여 사용자 정의 테이블을 지정할 수 있습니다 관계의 경우 자동으로 사용됩니다. 다시, 관계 함수에서 추가 인수를 지정하여이 규칙을 대체 할 수 있습니다. 당신이 좋아 예를 들어,

    Docs for Laravel eloquent relationship

    class User extends Eloquent implements UserInterface, RemindableInterface { 
         public function post(){ 
          return $this->hasMany('Post', 'userId', 'id'); 
         } 
        } 
    
        class Post extends Eloquent{ 
         public function user(){ 
          return $this->belongsTo('User', 'userId', 'id'); 
         } 
        } 
    

    테이블의 다른 컬럼의 경우, 그 이름을 지정할 수 있습니다.

    문서를 한 번 읽으시기 바랍니다.

    +0

    당신의'hasMany' 예제가 잘못되었습니다 - 열쇠는 대체되어야합니다 (2 번째 파라미터는 fk, 3 번째 파라미터는 pk). –

    +0

    @Jarek Tkaczk 죄송합니다. 나는 내 대답을 편집했다 – user4055288

    +0

    테이블 이름'도시'는 어떨까요? 그것이 도시인가 도시인가? 나는 추측한다. – Bsienn

    5

    나는 일반적으로이 두 예제에 모두 동의하지 않습니다.

    특히 Eloquent의 관계 세션 (http://laravel.com/docs/4.2/eloquent#relationships)에서 공식 Laravel 문서를 살펴 보는 것이 좋습니다.

    테이블 이름은 복수형, 즉 사용자 모델의 '사용자'테이블이어야합니다.

    그리고 열 이름은 Camel Case가 아니지만 Snake Case 일 수 있습니다. 이미 답변 된 것을보십시오 : Database/model field-name convention in Laravel?

    너무 평소와 같이 RedBeanORM과 같은 것으로 볼 수 있습니다 : 열의 Snake Case. 다른 것을 시도해도 마찬가지입니다. 또한 Model 객체에서 호출하여 관계에 액세스 할 수있는 메서드로 인해 열 이름을 사용하여 테이블 이름을 반복하지 않는 것이 좋습니다.

    -1

    기본 테이블 명명 규칙을 사용하면 실수로 동일한 클래스 이름을 가진 여러 패키지를 쉽게 설치할 수 있습니다. 해결책은 테이블 이름을 지정하는 것입니다 : [vendor]. [package]. [class]. Laravel의 네임 스페이스가 적용되는 방식과 일치합니다.

    편집 : 테이블 이름에 점을 사용하는 것은 좋지 않습니다. 모듈 식 빌드 된 응용 프로그램의 개발자가 기존 테이블 이름에 대해 신경 쓸 필요가 없도록하는 데 사용할 수있는 대체 규칙이 있습니까?

    +0

    "이름 테이블 : .."? 왜 그걸 할거야? – m02ph3u5