Confluence 에 심각한 보안 취약점이 발견되었으니 사용자분들은 업그레이드 하세요.!
 
1
0
-1

다대다 관계가 형성되있습니다
contract table / service table / contract_service table

이렇게 세게의 테이블이 있습니다.

contract 모델
public function services()
{
return $this->belongsToMany('App\Service', 'contract_service ');
}
service 모델

public function contracts()
{
return $this->belongsToMany('App\OmContract', 'contract_service ');
}

이렇게 관계가 정의되있습니다

contract 테이블에서 데이터를 로드하고 그 에 맞는 service 테이블의 정보를 얻고싶어서 뷰에서

foreach ($data->services as $row){
<div>{{$row->pivot}}</div>
}

이렇식으로 출력하면

서비스테이블의 데이터가 나오는게 아니라

{"contract_id":"50","service_id":"2"}
{"contract_id":"50","service_id":"2"}

이런식으로 피벗테이블의 내용이 나오는데 ,,, 서비스테이블의 내용을 얻고싶을땐 어찌해야될까요??

제가 관계를 잘못정의했을까요 .. ?

    CommentAdd your comment...

    1 answer

    1.  
      1
      0
      -1

      이런 경우의 관계 정의는 

      service → hasMany → contractServices

      service → hasMany → contracts → Through → contractServices 

      가 맞을 것 같습니다. ^^ (정확한 도메인 비즈니스는 모르겠지만, 서비스에 대해 여러개의 계약이 발생하는 의미라면...)

      contracts의 경우, 그 반대가 되어야 하지만 제가 알기로 Eloquent는 아직 "belongsToManyThrough"를 지원하지 않는 것으로 알고 있습니다. 이 때문에 어쩔 수 없이 hasManyThrough로 정의하셔야 할 것 같습니다.

      정리하면, Service 클래스 내부의 association 정의는

      ```

      public function contractServices()

      {

          return $this->hasMany('App\ContractService');

      }

      public function contracts()

      {

          return $this->hasManyThrough(
              'App\Contract',
              'App\ContractService,
              'service_id',
              'id',
              'id',
              'contract_id'
          );

      }

      ```

      와 유사한 형태가 되어야 할 것 같습니다. (Contract는 이와 반대)

      위의 코드는 예시이고, 실제 상황에 맞추어 수정이 필요할 것 같습니다. ^^

        CommentAdd your comment...