php - 在 Doctrine 中过滤 @OneToMany

标签 php symfony doctrine-orm

我有一个@OneToMany 关系:

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

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

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

最佳答案

选项 1

我推荐使用 Criteria过滤集合

use Doctrine\Common\Collections\Criteria;

$clist = $entityManager->find('Clist', $clistId);
$contentCollection = $clist->getContents();

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

$undeletedContents = $contentCollection->matching($criteria);

选项 2

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

如果您有一些大多数实体在大多数时间都被查询的属性(例如 ClientId 或 Deleted 属性),这通常是有意义的。

关于php - 在 Doctrine 中过滤 @OneToMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42855516/

相关文章:

php - 在递归调用中使用先前调用的参数而不作为参数发送 - PHP

PHP 获取包含子目录的文件列表

php - 为什么jquery ajax发送多次?

php - Symfony 不会缓存 Controller 上的更改

php - Symfony 2 缓存 Doctrine 查询结果

php - PHP 中的多步表单 - MVC 应用程序

php - 尝试生成实体时 Symfony2/Doctrine2 无效映射文件异常

php - Symfony2 从 Windows(WAMP) => 到 MAC(MAMP)

php - 代理对象而不是 Doctrine 中的实体

php - 学说问题(映射不一致)