세 방향 피벗 테이블을 사용하여 작업 할 때 Laravel에서 열심히로드하는 데 어려움을 겪고 있습니다. 다음과 같이 데이터베이스 설정 : redeems
분명히 피벗 테이블열심히로드하는 세 방향 피벗 테이블 Laravel
+-------+--------+-------+-------------+
| deals | venues | users | redeems |
+-------+--------+-------+-------------+
| id | id | id | deal_id |
| title | name | name | user_id |
| | | | venue_id |
| | | | redeemed_at |
+-------+--------+-------+-------------+
. 이 같은 사용자 모델의 모습 :
<?php
class User extends Authenticatable
{
/**
* The deals redeemed by the user.
*/
public function deals()
{
return $this->belongsToMany(Deal::class, 'redeems')
->withPivot(['venue_id', 'redeemed_at']);
}
}
이 날이 작업을 수행 할 수 있습니다 :
$users = Users::with('deals')->all();
을 그리고 나서 사용자의 좋은 개요와 그들이 같은 구조로 구속 한 모든 거래를 얻을 이 :
{
"id": 1,
"name": "Diederik",
"deals": [
{
"id": 33,
"title": "Deal Title",
"pivot": {
"user_id": 1,
"deal_id": 33,
"venue_id": 50
}
}
]
}
지금은 그 대신 나중에 $user->pivot->venue_id
쿼리의 열망로드하여 장소 정보를 추가하고 싶습니다. $users = Users::with('deals.venue')->all();
하지만 거래 테이블이 장소에 외부 키를 가지고 있지 않기 때문에 문제가 해결되지 않습니다
deal
모델의
belongsTo
관계를 설정하고 다음과 같이와 중첩을 수행했습니다. 거래가 여러 장소에 적용될 수 있기 때문입니다.
정상적인 데이터베이스 쿼리를 사용하면 매우 쉽게 달성 할 수 있다는 사실을 알고 있습니다.하지만 API가 작동하는 방식에 대해서는 URL 설정에서 이와 같은 방법을 사용하여 찾을 수있는 웅변적인 with
관계 함수를 사용해야합니다.
TLDR : 중첩 된 3 방향 피벗 테이블 관계를로드하는 방법.
답변 해 주셔서 감사합니다. '거래'와 '장소'의 관계는 다 대 다수이다. 한 거래는 여러 장소에서 상환 할 수 있으며 장소는 여러 거래를 제공 할 수 있습니다. 그러므로 제안하는 것은 작동하지 않을 것입니다. 왜냐하면 그 둘을 연결하는 다른 피벗 테이블 ('deals_venue')이 있기 때문입니다. – Diederik
다시 말하자면, 당신이 제안하는 것은 효과가 있지만 그 다음에는 그 거래를 제공하는 모든 장소가 주어지며 거래가 회수되는 특정 장소는받지 못할 것입니다. 개최지와 거래 사이 관계는 나의 질문을 위해 진짜로 중요하지 않다, 그래서 나는 나의 최초 질문에서 그것을 생략했다. – Diederik