1

首先,我要非常感谢 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 中解决这个问题?谢谢。

4

2 回答 2

0

您不使用 ManyToMany,而是创建第三个实体 PersonEmail。

不过,我发现您的数据库架构非常值得怀疑。为什么一封电子邮件可以有很多人?在这种情况下,OneToMany 关系不应该足够吗?我没有看到连接表的好处。

于 2010-11-25T11:17:14.230 回答
0

Doctrine 不支持关联条件,但有几种方法可以解决这个问题:

创建查询所需相关实体的存储库方法。请参阅QueryQueryBuilder

使用Collection Criteria API从 getter(在您的实体中)的集合中过滤非活动实体。如果关联被标记为“EXTRA_LAZY”,则将使用优化查询而不是检索整个集合。这对于大型集合非常有用。

使用过滤器 API在数据库级别过滤非活动实体。当您几乎总是想要隐藏非活动(或已删除等)实体时,这非常有用。

于 2013-09-01T14:20:26.157 回答