2012-08-11 1 views
1

많은 사용자와 많은 디자인을 가진 사이트가 있습니다. 각 사이트는 한 명의 사용자가 만들었습니다. 사용자는 다른 디자인을 즐겨 찾기로 선택하고 즐겨 찾기를 표시하는 페이지로 이동할 수 있습니다. 따라서 "즐겨 찾기"라는 사용자와 디자인 간에는 다 대다 관계가 있습니다.Doctrine many-to-many 구현하기 - 가끔

나는이 가장 좋아하는 관계를 구현하는 가장 좋은 방법이 무엇인지 궁금합니다. 나는 단지 특정 사용자를위한 즐겨 찾기를 찾고 있으며 한 페이지에만 있습니다. Doctrine은 모든 관련 객체가있는 객체를 반환하는 것으로 기본 설정되어 있으므로이 관계를 추가하면 모든 디자인 목록 API 호출에 갑자기 많은 수의 객체가 추가됩니다.

설정 방법에 대한 조언이 있으십니까? 나는 모든 개체에 대한 저장소를 가지고있다.

+0

걱정할 필요를 수행 LIMIT를 적용, 교리에서 질의 객체를 오프셋합니다. Doctrine은 기본적으로 게으르며로드되므로 액세스하려고하지 않는 한 추가 객체를 가져 오지 않습니다. 또한 쿼리 빌더를 사용하여 객체를로드하고 원하는 것을 정확하게 지정할 수 있습니다. – Cerad

+0

나는 쿼리 빌더가 갈 길이라고 생각한다. API 및 AJAX 호출을 많이 사용하므로 게으른로드에 대한 옵션이 많지 않습니다. 모든 것이 JSON API 호출에서 클라이언트의 용도로 전송됩니다. 그래서 모든 추가 데이터를 얻습니다. 객체를 findBy()에서 반환하고 곧바로 JSON으로 변환합니다. – SkippyFlipjack

+0

Extra Lazy Associations : http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/tutorials/extra-lazy-associations.html 사용자가 즐겨 찾기를 많이 사용하는 경우 유용 할 수도 있습니다. – WizardZ

답변

0

태그와 게시물 사이에있는 구현을 공유합니다 (게시물에는 여러 개의 태그가있을 수 있으며 각 태그는 둘 이상의 게시물과 연관 될 수 있음). 나는 당신이 시작하기에 충분하다고 생각합니다. 그것은 설치에 매우 간단합니다

포스트 엔티티에서, 나는이있다 : 조인 테이블에 대한 필요가

/** 
* @ManyToMany(targetEntity="Post", mappedBy="tags") 
*/ 
protected $posts; 

없는 엔티티 : 태그 엔티티에서

/** 
* @ManyToMany(targetEntity="Tag", inversedBy="posts") 
* @JoinTable(name="activity_relationship", 
*  joinColumns={@JoinColumn(name="object", referencedColumnName="id")}, 
*  inverseJoinColumns={@JoinColumn(name="subject", referencedColumnName="id")} 
*) 
*/ 
protected $tags; 

을,이 있습니다 .

태그가있는 게시물의 경우 항상 작은 금액이 있기 때문에 태그 속성에 액세스하는 것으로 충분하지만 각 태그에는 많은 톤과 게시물이있을 수 있으므로 일부 LIMIT 및 OFFSET이이를 제어합니다. 이런 이유로 Cerad는 위에서 언급 한 것처럼 직접 $ posts 변수를 사용할 필요가 없으며 대신 dql을 사용하여 별도로 쿼리합니다.

SELECT t 
FROM Post p 
JOIN p.tags t 
<add whatever other stuff you want> 

는 해당 쿼리를 실행하는 것을 선호하는 방법과 상관없이, 당신은 아마

$query->setMaxResults($limit); 
$query->setFirstResult($offset); 
+0

댓글에 해당 코드 블록이 무엇입니까? –