我有两个实体,条目和评论。
注释:
/**
* @Entity(repositoryClass="\Entities\Blog\CommentRepository")
* @Table(name="blog_comment")
* @HasLifecycleCallbacks
*/
class Comment extends \Entities\AbstractEntity
{
/**
* @Id @Column(name="id", type="integer")
* @GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ManyToOne(targetEntity="Entry", inversedBy="comments")
* @JoinColumn(name="entry_id", referencedColumnName="id")
*/
protected $entry;
/** @Column(name="approved", type="string", length=255) */
protected $approved;
/** @Column(name="title", type="string", length=255) */
protected $title;
/** @Column(name="content", type="text") */
protected $content;
/** @Column(name="pub_date", type="datetime") */
protected $pub_date;
/** @Column(type="datetime") */
private $created_at;
/** @Column(type="datetime") */
private $updated_at;
/** @PreUpdate */
public function updated()
{
$this->updated_at = new \DateTime("now");
}
public function __construct()
{
$this->created_at = $this->updated_at = new \DateTime("now");
}
}
class CommentRepository extends \Entities\PaginatedRepository
{
protected $_entityClassName = 'Entities\Blog\Comment';
}
和条目:
<?php
namespace Entities\Blog;
/**
* @Entity(repositoryClass="\Entities\Blog\EntryRepository")
* @Table(name="blog_entry")
* @HasLifecycleCallbacks
*/
class Entry extends \Entities\AbstractEntity
{
/**
* @Id @Column(name="id", type="integer")
* @GeneratedValue(strategy="AUTO")
*/
protected $id;
/** @Column(name="permalink", type="string", length=255) */
protected $permalink;
/** @Column(name="title", type="string", length=255) */
protected $title;
/** @Column(name="pub_date", type="datetime") */
protected $pub_date;
/** @Column(name="content", type="text") */
protected $content;
/** @OneToMany(targetEntity="Comment", mappedBy="entry") */
protected $comments;
/** @Column(type="datetime") */
private $created_at;
/** @Column(type="datetime") */
private $updated_at;
/** @PreUpdate */
public function updated()
{
$this->updated_at = new \DateTime("now");
}
public function __construct()
{
$this->comments = new \Doctrine\Common\Collections\ArrayCollection();
}
我可以通过以下方式获取属于每个条目的所有评论的集合:
foreach ($comments as $comment){
$comment-$commentId;
}
但是如何从评论方面获取条目信息。例如,我想从特定评论中获取条目ID
答案 0 :(得分:0)
每次创建@OneToMany
关系时,都会在“One” - 关系的类中创建Collection
个代理对象,并在“很多”的类中创建单个代理对象关系。代理类由Doctrine2根据您的映射信息自动生成。
要允许Doctrine2使用来自数据库的实际数据填充代理对象,请务必将其声明为protected
或private
。我不确定这一点,但似乎Doctrine会跟踪实体类中代理对象的任何请求,并确保在首次使用之前填充代理。
要访问关联对象,您必须在Comment
类中定义访问者函数:
class Comment extends \Entities\AbstractEntity{
/** other definitions */
function getEntity(){
return $this->entity;
}
}
并像
一样使用它$comment = $em->find("Entities\Comment",1);
$entity = $comment->getEntity();
Doctrine2会自动使用实际的$comment->entity
对象填充Entity
代理。
有关代理的详细信息,请参阅"Workin with Objects" chapter of Doctrine documentation和"Can you explain me what is a Proxy in Doctrine 2?"。