首先,我要对Doctrine开发人员表示非常感谢,你们是摇滚乐的人! 我的问题如下:
我有三张桌子:
person (id, name, isActive)
email (id, address, isActive)
personEmailRel(id, personId, emaiId, isActive)
我希望按人名列出电子邮件:
/**
* Unidirectional - Many persons have many emails
*
* @ManyToMany(targetEntity="Address_Model_Email")
* @JoinTable(name="personEmailRel",
* joinColumns={@JoinColumn(name="personId", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="emailId", referencedColumnName="id")}
* )
*/
private $_emails;
public function __construct()
{
$this->_emails = new Collections\ArrayCollection();
}
public function getEmails()
{
return $this->_emails;
}
工作正常。但问题是我还想在join子句中设置加法条件 isActive = 1。如何在Doctrine2中解决这个问题?感谢。
答案 0 :(得分:0)
您不使用ManyToMany但是创建第三个实体PersonEmail。
我发现您的数据库架构非常值得怀疑。为什么电子邮件有很多人?在这种情况下,OneToMany关系不应该足够吗?我没有看到连接表的好处。
答案 1 :(得分:0)
Doctrine不支持关联条件,但有几种方法可以解决这个问题:
创建一个存储库方法,用于查询所需的相关实体。请参阅Query和QueryBuilder。
使用Collection Criteria API过滤getter中的非活动实体(在您的实体中)。如果关联标记为“EXTRA_LAZY”,则将使用优化查询而不是检索整个集合。这对于大型集合非常有用。
使用Filter API过滤数据库级别的非活动实体。当您几乎总想隐藏不活动(或已删除等)实体时,这非常有用。