가장 먼저 알아볼 관계는 일대일 관계로 테이블 A의 모델은 관계되는 테이블 B의 하나의 모델과만 일치하며 이 반대의 경우도 마찬가지인 관계입니다.

예로 사용자의 정보를 담고있는 users 테이블은 사용자의 이메일, 전화번호, 웹사이트 정보를 담고 있는 테이블인 profiles 과 일대일 관계입니다.

 

일대일 관계 정의는 모델 클래스에 관련된 테이블명과 동일한 메소드를 만들고 이 안에 hasOne() 메소드로 테이블 모델을 지정해 주면 됩니다.

class User extends Model
{
    public function profile()
    {
        return $this->hasOne(Profile::class);
    }
CODE

 

대상이 되는 profiles 테이블은 belongsTo()  메소드로 속하는 테이블을 기술해 줍니다.

class Profile extends Model
{
    /**
     * Get the user that owns the profile.
     */
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}
CODE

만약 profiles 테이블의 users 테이블을 참조하는 참조키 컬럼명이 user_id 가 아닐 경우 belongsTo 의 두 번째 파라미터에 참조키 컬럼명을 기술하면 됩니다.

다음은 참조키의 이름이 fk_user_id 일 경우 Profile 모델의 user() 메소드 입니다.

public function user()
{
    return $this->belongsTo(User:class, 'fk_user_id');
}
CODE

 

이제 다음처럼 관계되는 테이블명과 같은 메소드를 프로퍼티처럼 사용하여 사용자의 프로파일을 가져올 수 있습니다.

$profile = User::find(1)->profile;
CODE

가장 간단한 관계이므로 독자들이 직접 Profile 테이블에 대해 migration 을 만들고 Profile 모델을 만들고 모델 팩토리로 데이타를 넣어서 결과를 확인해 보기 바랍니다.