2014-10-15 1 views
1

저는 회사를 위해 응용 프로그램을 개발 중이며 Laravel을 사용해 왔습니다. 사용자가 다른 사용자에게 속할 수 있도록 내 사용자 모델에 자기 참조 BelongsToMany 관계가 필요했습니다. 내가 관계를 사용하는 경우는 관련 테이블을 통해 검색 할 잘못된 ID를 사용하기 때문에왜 내 ID와 반환 된 ID가 일치하지 않습니까?

$id = 6; 
var_dump("ID Queried Is: $id.", Sentry::getUser()->clients()->find($id)->toArray()); 

Sentry::getUser()->clients()->find($id)의 결과는 문제가 발생 : - (즉 유해 클라이언트)

여기 내 코드입니다.

나는 Sentry::getUser()->clients->find($id)을 사용할 수 있으며 지정된 ID를 가진 사용자를 반환하지만, 내가 알고있는 모델에 관계를 열망 할 수는 없습니다. 피벗 테이블보다는라는 이름의 키 (client_id)에 의해 기본 키가 설정 한 결과를 조회, 그렇다면, 나는 주위 어떻게 (Sentry::getUser()->clients()를 예를 들어)를 BelongsToMany 관계

ID Queried and ID Returned Don't Match

을 얻을 수 있습니까?

+0

ID가 6 인 클라이언트 또는 클라이언트를 찾으려고합니까? ID가 6 인 사용자에게? –

+0

ID # 6을 가진 클라이언트를 찾고 있는데, 예상 된 사용자가 자신의 클라이언트에 클라이언트 # 6을 가지고있는 경우에만 찾으려고합니다. (이전) – Goldentoa11

+0

지금은 ("client_id", "=", $ id) -> first ("folders") ->와 함께'Sentry :: getUser() -> clients()()'를 사용하는 것이지만, 너무 무거운 느낌입니다. – Goldentoa11

답변

1

당신이 볼 수있는이 Sentry::getUser()->clients()->find($id)의 결과는, 예쁜 많이 맞았다. 다른 필드 바로 동안 결과

$client->id; // id of the pivot table 

을 보유되도록함으로써 I 그러나 그것은 그렇게 select *id (및 다른 일반 필드)를 재정의하고, 사용자가 정확한 뜻을 가져온다. (당신은 정말이 필요한 경우)

$client = Sentry::getUser()->clients()->select('users.*')->find($id); 

또는 게으른 부하의 관계 및 Collectionfind() 방법을 사용합니다 :

그래서 당신은이 같은 관계를 조회 할 수 있습니다

$user = Sentry::getUser()->load('clients'); 
$client = $user->clients->find($id); 

// or one line, not recommended: 
$client = Sentry::getUser()->load('clients')->clients->find($id); 

그렇지 않으면 단지 무엇을 사용을 시도 :

$client = Sentry::getUser()->clients->find($id); 
+0

* why * id가 사용자 테이블의 행 ID 대신 피벗 테이블의 행 ID를 사용하고있어 주셔서 감사합니다. 참고로, Laravel Eager는 기본적으로 관계를로드합니까? 나는 그들이 게으른 로딩 (예를 들어, 필요할 때까지로드되지 않음)이라고 생각했지만 위의 예제를 통해 그것이 맞는지 아닌지 궁금해하게 만듭니다. – Goldentoa11

+0

아니요, 말하지 않으면 아무 것도로드하지 않습니다. 왜 그렇게 생각하니? –

+0

'$ user = Sentry :: getUser() -> load ('clients'); 그리고 'prefacing'또는 릴레이션로드 (관계가 필요하다면) '. Laravel Eager가 기본적으로로드되는지 궁금합니다. – Goldentoa11

0

당신이 함께 시도 할 수 있지만, 그것은 당신이 달성하고자하는 거라면 내가 당신을 위해 작동하는지 알고하지 않습니다

$users = Sentry::getUser()->with(array('clients' => function($q) use($id) 
{ 
    $q->whereId($id); 

}))->get()->toArray(); 
관련 문제