먼저 users 테이블 구성입니다.
다음으로 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으로 확인해봅니다.
그러면 이런식으로 각 user_id에 해당하는 user 정보도 가지고 오는 것을 확인할 수 있습니다.
public function show($id)
{
$mbti = Mbti::where('id', $id)->first();
$mbti->user;
return response()->json([$mbti], 200);
}
MbtiController에 show 메서드를 정의하고 api.php에도 라우트를 설정해줍니다.
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 |
댓글