2010-07-06 5 views
2

어쨌든 Doctrine 2 문법을 사용하여 다음 관계를 구현하는 방법을 알 수 없습니다.PHP-Doctrine2 : Items - 상점 - ItemsAtShops - Doctrine2를 사용하여 편리하게 구현하는 방법?

Items 및 Shops가 있습니다. 각 품목은 각 상점에 다른 가격 및 다른 양이 있습니다. 그래서 Items 테이블, Shops 테이블 및 ItemsAtShops 테이블이 있습니다. Doctrine의 마지막 문장을 어떻게 반영합니까?

ItemsAtShops 엔티티를 만들 필요가 있다고 생각합니다. ManyToOne -> Items 및 ManyToOne -> Shops, 맞습니까? 하지만이 경우 ... 은 해당 상점에서 가격 및 수량을 가진 특정 상점의 상품 목록을 편리하게 가져 오지 않습니까? 그래서이 모든 것들이 편리하게 반복되는 일 수 있습니까?

특정 상점에서 상품 및 가격 목록과 수량이있는 페이지를 렌더링해야합니다. 상품 을 표시하기위한 템플릿이 있습니다 (모든 하위 속성 - 가격 등). 따라서 하나의 객체를 이 템플릿에 전달하고 반복하면이 객체가 반복되어 그 하위 객체 (있는 경우)가있는 것이 가장 편리합니다.

답변

2

나는 교리에서 이런 종류의 시나리오와도 투쟁합니다. 레일스는 이런 종류의 일을 사소한 것으로 만드는 has_many :through => 관계로 나를 망쳤다.

당신이 맞습니다. 상점, Items, 이중 ManyToOne 관계를 사용하는 ItemsAtShops 세 엔티티가 필요합니다.

내가 ItemsAtShop의 모습 가정 것 : 지금까지 질의하는 간다, 당신은 조인 바위해야합니다

class ItemsAtShop 
{   
    private $shop; 
    private $items; 
    private $quantity; 
} 

:

$queryBulder->select('ias') 
      ->from(ItemsAtShop, 'ias') 
      ->leftJoin('ias.Item', 'i') 
      ->leftJoin('ias.Shop', 's') 
      ->where('s.id = :shop_id') 
      ->andWhere('i.price <= :my_price') 
      ->orderBy('i.price', 'DESC'); 

DQL을 사용하는 경우, 기억, 당신 ' 일반적으로 Entity 객체 전체를 질의하여 자신의 관계를 가져옵니다. 이렇게하면 ItemsAtShop 콜렉션을 반복 할 수 있습니다.

올바른 검색어를 찾기 위해 약간의 재검토가 필요할 수 있습니다. 필자가 알고있는 SQL 쿼리로 시작하여 DQL로 변환합니다.

관련 문제