在Doctrine

时间:2017-03-17 10:49:13

标签: php symfony doctrine-orm

我有一个@OneToMany关系:

/**
 * @OneToMany(targetEntity="\MyApp\Entities\Content", mappedBy="clist")
 * @OrderBy({"contentOrder"="ASC", "id"="ASC"})
 */
private $contents;

我得到了所有Content' s,clist属性是当前实例的id。但Content类也有isDeleted属性。如果设置为true,我想将其从列表中排除。

怎么可能? 我可以过滤getContents()函数中的列表,但我希望有更好的解决方案。也许在某种程度上,@OneToMany关系的定义

2 个答案:

答案 0 :(得分:3)

选项1

我建议使用Criteria来过滤集合

StringBuilder sb = new StringBuilder("status=").append(status).append(" ,msg=").append(msg);
System.out.println(sb);

选项2

另一种选择可能是使用Filters,您可以确保只要过滤器处于活动状态,每个查询都会确保附加“where”约束。

如果您的大多数实体(例如ClientId或Deleted属性)在大多数情况下都会查询某些属性,这通常会有意义。

答案 1 :(得分:2)

如果您使用ArrayCollection来存储您的关系,那么您可以这样做:

$criteria = Criteria::create()->where(Criteria::expr()->eq("isDeleted", false));
$contents = $yourMainClass->getContents()->matching($criteria);

希望这有帮助,

Alexandru Cosoi