简体   繁体   English

原则2.1-OneToMany关系,数据下载

[英]Doctrine 2.1 - OneToMany relation, data downloading

I have two classes: 我有两节课:

User : 用户名

/** @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;
    }
}

and News : 新闻

/** @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;
}

When I will make this code 我何时编写此代码

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

does the Doctrine will download all news (created by particular user) from database? 该学说会从数据库下载所有新闻(由特定用户创建)吗?

It won't until you request a user's news by calling the news accessor method. 除非您通过调用新闻访问器方法来请求用户的新闻,否则它不会。 If you rewrite your query as 如果您将查询重写为

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

Then a user and his news will be all returned as the result. 然后,用户及其新闻将作为结果全部返回。

You can also check the query generated by doctrine using a logger: 您还可以使用记录器检查由教义生成的查询:

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

PS: never do this: u.id = '.$id in queries to avoid sql injections. PS:永远不要这样做: u.id = '.$id ,以避免SQL注入查询。 Instead, use placeholders: 而是使用占位符:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM