라라벨 Eloquent one-to-one Relationship
// User 모델, contact 를 단수명사 표현
class User extends Model
{
protected $fillable = ['name', 'email', 'password'];
public function contact()
{
return $this->hasOne(Contact::class); // 또는
return $this->hasOne(Contact::class, 'user_id', 'id');
}
}
hasOne 메서드는 Laravel Eloquent에서 1:1 관계를 정의하는 데 사용됩니다.
이 관계에서 하나의 모델이 다른 모델을 소유하는 경우에 사용됩니다.
hasOne 메서드는 주로 외래 키가 소유되는 모델에 위치할 때 사용됩니다.
다음은 hasOne 메서드를 사용하여 1:1 관계를 설정하는 간단한 예제입니다.
이 예제에서는 User 모델이 하나의 Contact 모델을 소유하고 있다고 가정합니다.
이 코드에서 주목해야 할 몇 가지 포인트가 있습니다:
- hasOne 메서드:
- hasOne 메서드는 1:1 관계를 정의하는 데 사용됩니다.
- 이 메서드는 현재 모델(User)이 소유한(Contact) 모델을 지정합니다.
- 관련된 모델 및 외래 키 지정:
- Contact::class: 이 메서드는 현재 모델(User)이 소유한(Contact) 모델을 지정합니다.
- 'user_id': 외래 키로 사용될 Contact 모델의 컬럼 이름을 나타냅니다.
- 'id': 관련된 모델(User)의 주 키 컬럼 이름을 나타냅니다.
이제 위 코드를 사용하여 특정 User에 속한 Contact를 검색할 수 있습니다.
$user = User::find(1);
$contact = $user->contact; // User 모델의 contact 메서드를 통해 Contact 모델을 검색
// Contact 모델, user() 단수명사 표현
class Contact extends Model
{
protected $fillable = ['address', 'number', 'city', 'zip_code'];
public function user()
{
return $this->belongsTo(User::class); // 또는
return $this->belongsTo(User::class, 'user_id', 'id');
}
}
belongsTo 메서드는 Laravel Eloquent에서 역방향(Reverse) 1:1 관계를 정의하는 데 사용됩니다.
이 관계에서 하나의 모델이 다른 모델을 소유하는 경우에 사용됩니다.
보통 외래 키는 소유되는 모델에 속해 있습니다.
다음은 belongsTo 메서드를 사용하여 역방향 1:1 관계를 설정하는 간단한 예제입니다.
이 예제에서는 User 모델이 하나의 Contact 모델을 소유하고 있다고 가정합니다.
이 코드에서 주목해야 할 몇 가지 포인트가 있습니다:
- belongsTo 메서드:
- belongsTo 메서드는 1:1 관계에서 역방향 관계를 정의하는 데 사용됩니다.
- 관련된 모델 및 외래 키 지정:
- User::class: 이 메서드는 현재 모델(Contact)이 속한(User) 모델을 지정합니다.
- 'user_id': 외래 키로 사용될 Contact 모델의 컬럼 이름을 나타냅니다.
- 'id': 관련된 모델(User)의 주 키 컬럼 이름을 나타냅니다.
이제 위 코드를 사용하여 특정 Contact의 소유주(User)를 검색할 수 있습니다.
$contact = Contact::find(1);
$user = $contact->user; // Contact 모델의 user 메서드를 통해 User 모델을 검색
php artisan Tinker 엔터
-------------------------------
$user = User::create([...]);
$user->contact()->create([...]);
User::with('contact')->find(27);
$user = User::find(27);
$user->contact->address;