질문을 삭제하지 말아주세요.!
 
1
0
-1

라라벨의 hasone 관계를 이용해서 두개의 테이블 조인을 하고있습니다.

일단 제가 studymemberinfo 테이블과 studylogin 테이블을 조인합니다.

studymemberinfo의 기본키는 join_idx이구요, 이 기본키가 studylogin의 외래키로 들어가게됩니다

다음과 같은 결과가 나옵니다.

  • select * from `studyMemberInfo` where `studyMemberInfo`.`join_idx` = '14' limit 14.25msstudy
  • select * from `studyLogin` where `studyLogin`.`login_idx` is null limit 1

studyLogin에서도 join_idx 값으로 비교를 해야하는데 엉뚱하게 기본키인 login_idx 로  is null을 체크합니다. 왜그런건지 모르겠네요.  


Column not found: 1054 Unknown column 'studyLogin.study_member_info_id' in 'where clause' (SQL: select * from `studyLogin` where `studyLogin`.`study_member_info_id` = 14 and `studyLogin`.`study_member_info_id` is not null limit 1)

그래서 처음에는  $this→belongsTo(studyMemberInfo::class, '외래키이름'); 처럼 해봐도  결과가 제대로 나오지를 않습니다. 소스는 다음과 같습니다.


namespace App;

use Illuminate\Database\Eloquent\Model;

class studyMemberInfo extends Model
{
     protected $table = "studyMemberInfo";
     protected $connection = "mysql";
     protected $primaryKey = "join_idx";

     public function login(){

          return $this→belongsTo(studyLogin::class);

    }


}

 

namespace App;

use Illuminate\Database\Eloquent\Model;


class studyLogin extends Model{
      protected $table = "studyLogin";
      protected $connection = "mysql";
      protected $primaryKey = "login_idx";

     public function member(){

            return $this->hasOne(studyMemberInfo::class);
    }


}

컨트롤러에서는 아래와 같이 가져옵니다.

 

public function joinResultPage($id){
        $memberInfo = studyMemberInfo::find($id)->login;
       dump($memberInfo);
        //$memberInfo->join_idx;
}

 

결과는 계속 null을 출력하고있습니다. 왜 그러는걸까요?

    CommentAdd your comment...

    2 answers

    1.  
      2
      1
      0

      Join 컨트롤러 부분에서

      $memberInfo = studyMemberInfo::where('join_idx',$id)→with('login')→get();

      이렇게 한번 해보세요

       

      1. 이태희

         

        가르쳐주신 방식대로 했습니다. 그런데 두개의 테이블을 합하면  조인한 테이블의 전체 컬럼이 나와야하는데 한테이블에 있는 컬럼만 다나오네요, 왜그럴까요, 이렇게되면 일대일 관계가 아니네요.ㅠㅠ

        $model = studyLogin::where('join_idx',$id)->with('member')->get();

        dump($model);

        relation에는 그냥 그대로 널이네요.;

        결국은 쿼리도 기존과 다를바가 없네요.

         

        • select * from `studyLogin` where `join_idx` = '14'2.82msstudy
        • select * from `studyMemberInfo` where `studyMemberInfo`.`join_idx` in ('0')
      CommentAdd your comment...
    2.  
      2
      1
      0

      Eloquent는 relationship 메소드의 이름을 검사하고 메소드 이름에 _id를 붙여서 외래 키의 기본 이름으로 결정합니다. 하지만 모델의 외래 키가 메소드명_id가 아니라면 커스텀 키 이름을 두번째 인자로 belongsTo에 전달하면 됩니다.

      https://laravel.kr/docs/5.2/eloquent-relationships

      링크를 참조하시면 될거 같습니다.

      1. 이태희

         

        가르쳐주신 방식대로 했습니다. 그런데 두개의 테이블을 합하면  조인한 테이블의 전체 컬럼이 나와야하는데 한테이블에 있는 컬럼만 다나오네요, 왜그럴까요, 이렇게되면 일대일 관계가 아니네요.ㅠㅠ

        $model = studyLogin::where('join_idx',$id)->with('member')->get();

        dump($model);

        relation에는 그냥 그대로 널이네요

         

         

        결국은 쿼리도 기존과 다를바가 없네요.

         

        • select * from `studyLogin` where `join_idx` = '14'2.82msstudy
        • select * from `studyMemberInfo` where `studyMemberInfo`.`join_idx` in ('0')
      CommentAdd your comment...