2013-10-04 2 views
0

나는 대일 모노 방향 관계로 2 개 간단한 테이블을했습니다 :교리와 참여 결과 유형

class Event extends BaseEvent 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 


    /** 
    * 
    * @ORM\ManyToOne(targetEntity="Rposition") 
    * @ORM\JoinColumn(name="owner", referencedColumnName="id",onDelete="CASCADE", nullable=false ) 
    **/ 
    private $owner; 
.... 

및 소유자 필드 클래스의 기원 :

class Rposition 
{ 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="string", length=36) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="UUID") 
    */ 
    private $id; 


    /** 
    * 
    * 
    * @ORM\Column(name="scenario", type="string", length=255, nullable=false) 
    */ 
    private $scenario; 

두 클래스를 갖는

public function findAllByScenario($scenario) { 
     $q = $this->getEntityManager()->createQuery("SELECT e , r.scenario , r.id 
            FROM LapoMymeBundle:Event e 
            JOIN LapoMymeBundle:Rposition r 
            WITH e.owner = r.id 
            WHERE r.scenario = :scenario 
            ORDER BY e.start ASC, e.end ASC 
            ")->setParameter('scenario', $scenario); 
     try { 

      return $q->getResult(); 
     } catch (\Doctrine\ORM\NoResultException $e) { 
      return null; 
     } 

    } 
0 : 우측 게터/세터와 __toString()

은이 같은 쿼리를 구현해야합니다

- 조인을 만들고 결과를 돌려 보내는 올바른 방법입니까?

- 개체 배열에서 필드를 가져 오는 올바른 방법은 무엇입니까? 그런

뭔가는 다음과 같습니다

$events=$this->getDoctrine()->getManager() 
     ->getRepository('LapoMymeBundle:Event')->findAllByScenario($scenario); 

    $outputUsersArray = Array(); 
    foreach($events as $event) 
    { 
     $eventArray = Array();   

     $eventArray[JSONResponseFields::KEY_ID] = $event->getId(); 
     $eventArray[JSONResponseFields::KEY_NAME] = $event->getOwner()->getId(); 

     $outputEventsArray[] = $eventArray; 
    } .... 

상승 오류가 좋아 :

FatalErrorException: Error: Call to a member function getId() on a non-object in..... 
+0

검색된 모든 이벤트에 소유자가있는 것은 아닌지 가능한가요? '$ event-> getOwner()'가'null' 인 경우처럼? –

+0

아니요, nullable = false 속성이 설정 됨 – JahStation

답변

0

이 작업을 얻기 위해 교리 쿼리 빌더를 사용할 수 있습니다. Querybuilder 인스턴스가 있다고 가정합니다. 쿼리는 다음과 같을 것입니다

$ qb = this-> getDoctrine() -> getRepository ('BundleName : Event') -> createQueryBuilder ('e');

$query = $qb 
    ->select('e','p') 
    ->innerjoin('u.owner','r') 
    ->where('r.scenario= :scenario') 
    ->setParameter('scenario', $scenarioid) 
    ->getQuery(); 

$chatuser = $query->getResult();