본문 바로가기
IT/PHP

Laravel - 일대다 관계

by Sungjun_ 2021. 4. 23.

먼저 users 테이블 구성입니다.

users 테이블

다음으로 mbtis 테이블 구성입니다.

mbtis 테이블

 

 

한 명의 사용자는 여러 개의 mbti 게시물을 가지고 있을 수 있습니다.

그래서 User모델과 Mbti모델을 일대다 관계로 만들어줍니다.

User 모델에 mbti 메소드를 만들어줍니다.

public function mbti()
{
    return $this->hasMany('App\Models\Mbti');
}

 

위와 같이 메소드를 만들어줍니다.

hasMany에 두 번째 인자로 외래키가 와야하는데, 외래키 이름은 '모델 이름 + _id'를 가질 것으로 자동으로 결정되는데

만약 그렇지 않다면 직접 두 번째 인자에 외래키 이름을 넣어주면 됩니다.

 

다음은 역관계로, 반대로 Mbti 모델에서도 User 모델에 접근할 수 있도록 만들어줍니다.

Mbti 모델에 user 메소드를 만들어줍니다.

public function user()
{
    return $this->belongsTo('App\Models\User' );
}

 

역관계에서는 hasMany가 아닌 belongsTo를 사용합니다.

belongsTo의 두 번째 인자도 외래키 이름이 들어가는데

Mbti 모델의 외래키 이름이 user_id가 아니라면 직접 넣어주면 됩니다.

 

이렇게 관계를 정의해주고 제대로 작동하는지 실험해봅시다.

public function index()
{
    $mbtiName = $this->mbtiName();
    $mbtis = Mbti::where('mbtiName', $mbtiName)->orderBy('id', 'desc')->paginate(40);
    foreach ($mbtis as $mbti){
        $mbti->user->name;
    }
    return response()->json([$mbtis], 200);
}

 

MbtiController로 가서 위와 같이 작성해주고 api.php 파일에도 라우트를 정의 해준 뒤에 postman으로 확인해봅니다.

 

index

 그러면 이런식으로 각 user_id에 해당하는 user 정보도 가지고 오는 것을 확인할 수 있습니다.

 

 

public function show($id)
{
    $mbti = Mbti::where('id', $id)->first();
    $mbti->user;

    return response()->json([$mbti], 200);
}

 

MbtiController에 show 메서드를 정의하고 api.php에도 라우트를 설정해줍니다.

 

show

 postman에서 18번 글을 가지고 왔을 때도, 정상적으로 글 내용과 유저 정보를 가지고 오는 것을 확인할 수 있습니다.

'IT > PHP' 카테고리의 다른 글

Laravel - 이메일 보내기  (1) 2021.05.04
Laravel - faker 한글  (0) 2021.05.03
Laravel - @include  (0) 2021.04.14
Laravel - 컨트롤러 줄이기  (2) 2021.04.14
Laravel - 이미지 리사이즈  (1) 2021.03.09

댓글