Laravel 문서는 hasManyThrough
선언이 두 수준 "깊은"관계에만 사용될 수 있음을 나타냅니다. 더 복잡한 관계는 어떻습니까? 예를 들어, User
은 많은 숫자가 Subject
이고, 각 숫자는 Deck
이며, 각 숫자는 Card
입니다. User
에 속한 모든 Deck
을 hasManyThrough
선언을 사용하여 가져 오는 것은 간단하지만 User
에 속하는 모든 Card
은 무엇인가요?더 깊은 관계에 hasManyThrough 적용
4
A
답변
1
의견에 언급 된대로 hasManyThrough
은이 특이성 수준을 지원하지 않습니다. 우리는 Cards -> Decks -> Subjects
에서거야
//App\User;
public function cards()
{
Card::whereHas('decks', function($q){
return $q->whereHas('subjects', function($q){
return $q->where('user_id', $this->id);
});
});
}
: 당신이 할 수있는 것들 중 하나는 반대 방향으로가는 쿼리 빌더 인스턴스를 반환합니다. subjects
에는 user_id
열이 있어야하며 여기에 래치 할 수 있습니다. 사용자 모델에서 호출
, 그것은 thussly 할 것 :
$user->cards()->get();
0
음, 사실 가장 좋은 방법은 카드 테이블에 여분의 열을 넣어 될 것이다 - 당신이 얻을 너무 자주 요구가있는 경우, USER_ID를 사용자의 모든 카드
Laravel은 2 깊이 관계에 대한 Has-Many-Through 관계를 제공합니다. Laravel이 지원하지 않는 관계의 경우 최상의 테이블 관계를 직접 찾아야합니다.
어쨌든, 목적에 따라 다음과 같은 코드 스냅을 사용하여 사용자의 현재 관계 모델로 모든 카드를 가져올 수 있습니다.
가정
- 사용자
그래서 프로젝트 모델은 다음 코드 것이다 갑판에 hasManyThough
관계가 있습니다
public function decks()
{
return $this->hasManyThrough('Deck', 'Subject');
}
- 데크 시간을 카드에
hasMany
관계
코드로
$deck_with_cards = $user->decks()->with("cards")->get();
$cards = [];
foreach($deck_with_cards AS $deck) {
foreach ($deck->cards as $c) {
$cards[] = $c->toArray();
}
}
지금 $cards
는 $user
에 대한 모든 카드를 가지고있다.
관련 문제
- 1. 가능 : hasManyThrough through hasManyThrough?
- 2. 두 수준보다 깊은 HasManyThrough 관계를 가질 수 있습니까?
- 3. JSON에서 더 깊은 속성보기
- 4. 더 깊은 개체에 액세스
- 5. Laravel 관계 : hasManyThrough, belongsTo, belongsToMany
- 6. jQuery children() 더 깊은 곳으로
- 7. c3p0이 더 깊은 방법은 무엇입니까?
- 8. 더 깊은 항목을 표시해야합니다. AngularJs
- 9. EmberJS 필터, hasMany의 데이터는 belongsTo를 관계에 적용
- 10. Laravel hasManyThrough returns nothing
- 11. Laravel | 웅변 hasManyThrough
- 12. Laravel hasmanythrough where 문
- 13. Laravel에서 Relatioship hasManyThrough?
- 14. 컨트롤러의 더 깊은 레이어로의 CakePHP 라우팅
- 15. nodejs - 더 깊은 레벨에서 오류 잡기
- 16. 루비가 더 깊은 레벨에서 스레드를 이해함
- 17. Js lodash 더 깊은 필드로 정렬
- 18. 람다 식의 더 깊은 수준의 LINQ 쿼리
- 19. Python - 더 깊은 하위 폴더에서 가져 오기
- 20. Grails 제외가 더 깊은 레벨에서 작동하지 않습니다.
- 21. 프롤로그 카운트에 대한 더 깊은 설명
- 22. Json @JsonIgnore. 더 깊은 것을 무시하는 방법?
- 23. 더 깊은 xdocument 노드에 액세스하는 방법은 무엇입니까?
- 24. Angular2 : 디버깅을위한 더 나은/더 깊은 영역 스택
- 25. Laravel 정의되지 않은 메소드 호출. hasManyThrough 관계에 대해 \ Database \ Query \ Builder :: detach/attach()를 호출하십시오.
- 26. Laravel hasManyThrough 관계와 관련된 문제
- 27. hasManyThrough 유형 관계를 달성하려고 시도했습니다
- 28. 루프백 "hasManyThrough"관계. 어디에 추가할까요?
- 29. Laravel hasManyThrough with multiple keys
- 30. Laravel 5.5 : MongoDB를 & hasManyThrough() 관계
몇 년 전 [나는이 같은 질문을했다] (http://stackoverflow.com/questions/25938081/distant-hasmanythrough). HasManyThrough는 간단히 지름길입니다. 그것이 그대로, 먼 관계를 액세스하기위한 메커니즘이 내장되어 있지 않습니다. – maiorano84