Doctrine 2.1 - OneToMany关系,数据下载

时间:2011-12-14 22:48:51

标签: php doctrine-orm

我有两个班:

用户

/** @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 个答案:

答案 0 :(得分:1)

直到您通过调用新闻访问者方法请求用户的新闻才会这样做。如果您将查询重写为

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

然后,用户及其新闻将全部返回。

您还可以使用记录器检查doctrine生成的查询:

$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);