2017-12-31 69 views
2

Laravel 5.5를 실행하는 프로젝트가 있고 데이터베이스에 다음 테이블이 있습니다. 내가 잘못 아니에요 경우Laravel의 관계는 Eloquent를 사용하여 실제로 정확합니까?

USERS (
    ID, 
    NAME, 
    PERMISSION_ID 
) 

PERMISSIONS (
    ID, 
    NAME 
) 

는 권한이있는 사용자의 관계는 그것이 OneToOne 관계, 그래서 (USERS 적어도 1 개 허가 1의 최대가) 1.1입니다.

내 사용자 모델에서 나는 다음과 같은 관계를 맺었습니다.

class User extends Authenticatable 
{ 
    public function permission() { 
        return $this->hasOne('App\Models\Permission'); 
    } 
} 

그러나 이런 식으로 Laravel/Eloquent는 PERMISSIONS 테이블에서 관계를 찾습니다. 에 선택 유사한 생성 :

SELECT * FROM PERMISSIONS WHERE PERMISSIONS.USER_ID = 1 

난 이미 Laravel 설명서를 상담하고 난 hasOne의 방법에서 외래 키와 LocalKey를 지정할 수 있음을보고했다. 이것은 관계를 해결합니다.

그러나 기본적으로 PERMISSIONS 테이블의 정보를 가져 오는 데 Laravel/Eloquent가 실제로 맞습니까? 올바른 것이 USERS 테이블에서 PERMISSION_ID로 보이지 않을 것입니까? 인해 알렉세이 Mezenin

의 응답 @Edit

난과 belongsTo를 hasOne의 차이를 조사. 외래 키가 올바른 사람이 hasOne의를 사용하는 다른 테이블에있을 때 내가 이해 무슨에서

What is the difference between BelongsTo And HasOne in Laravel

: 그리고 다음과 같은 답을 발견했다.

외래 키가 템플릿의 자체 테이블에있는 경우, 올바른 키는 belongsTo를 사용하는 것입니다.

가 난 다음에, 감사 알렉세이 Mezenin이 세부에서 조정 및

답변

1

의 관계는, 당신이 hasOne() 대신 belongsTo의를 사용하는 반전 jedrzej.kurylo을 유지할 수 있습니다.

public function permission() 
{ 
    return $this->belongsTo(Permission::class); 
} 

그리고 Permission 모델에 당신이 (당신이 그것을 사용하고자한다면 경우에) hasOne() 관계를 추가 할 수 있습니다 : 다음 User 모델이 관계를 사용

public function user() 
{ 
    return $this->hasOne(User::class); 
} 

을하지만, 보통, 많은 사용자가 동일한 권한을 사용할 수 있습니다. 이 경우 hasOnehasMany으로 변경하십시오.

관련 문제