2011-12-14 3 views
1

다운로드 데이터 :

사용자 :교리 2.1 - OneToMany 관계, 나는 두 개의 클래스가

/** @Entity @Table(name="users") */ 
class User { 
    /** 
    * @Id @GeneratedValue @Column(type="integer") 
    * @var integer 
    */ 
    protected $id; 

    /** 
    * @Column(type="string", length=20, unique=TRUE) 
    * @var string 
    */ 
    protected $login; 

    /** 
    * @OneToMany(targetEntity="News", mappedBy="author") 
    */ 
    protected $news;  

    public function __construct() { 
     $this->news = new \Doctrine\Common\Collections\ArrayCollection; 
    } 
} 

뉴스을 :

/** @Entity @Table(name="news") */ 
class News { 
    /** 
    * @Id @GeneratedValue @Column(type="integer") 
    * @var integer 
    */ 
    protected $id; 

    /** 
    * @Column(type="string", length=100) 
    * @var string 
    */ 
    protected $title; 

    /** 
    * @Column(type="text") 
    * @var string 
    */ 
    protected $content; 

    /** 
    * @ManyToOne(targetEntity="User", inversedBy="news") 
    * @JoinColumn(referencedColumnName="id") 
    */ 
    protected $author; 
} 

이 코드를 만들 때

$q = $this->db->createQuery('SELECT u FROM User u WHERE u.id = '.$id); 
$user = $q->getSingleResult(); 

Doctrine은 데이터베이스에서 특정 사용자가 만든 모든 뉴스를 다운로드합니까?

답변

1

뉴스 접근 방법을 호출하여 사용자의 뉴스를 요청할 때까지는 그렇지 않습니다. 쿼리를 다시 작성하는 경우

SELECT u, n FROM User u JOIN u.news n 

그러면 사용자와 그의 뉴스가 모두 결과로 반환됩니다.

$config->setSQLLogger(new Doctrine\DBAL\Logging\EchoSQLLogger); 

PS :이 작업을 수행하지 :

는 또한 로거를 사용하여 교리에 의해 생성 된 쿼리를 확인할 수 있습니다 u.id = '.$id를 쿼리에서 SQL 주입을 방지하기 위해. 대신 자리 표시자를 사용하십시오.

$q = $this->db->createQuery('SELECT u FROM User u WHERE u.id = :id'); 
$q->setParameter('id', $id); 
+0

감사합니다. 다음 질문. 사용자의 뉴스는'$ user-> getNews()'메소드를 사용할 때 DB로부터 다운로드 될 것인가? –

+1

예를 들어 답을 썼습니다. 그렇지 않으면 실제 응용 프로그램에서 모든 데이터베이스를 다운로드합니다 :) – meze

+0

Ok. 다시 한 번 감사드립니다! :) –

관련 문제