我有两个班:
用户:
/** @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会从数据库下载所有新闻(由特定用户创建)吗?
答案 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);