[英]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.