[英]how to apply SoftDeletable on child entity using symfony 4
我想让用户发布他们的帖子(不是软删除)用户有很多帖子
return $this->em->getRepository(Users::class)->find($userId);
当我得到结果时,将返回带有deletedAt!=null 的帖子,但是当我只得到帖子列表时,不会返回已删除的帖子。
return $this->em->getRepository(Posts::class)->findAll();
所以当我从用户那里得到它们时,我需要应用这个过滤器子实体
由于您使用的是简单的find()
和findBy()
方法,我认为,最快的解决方案是在您的 getter 中使用Criteria
( \\Doctrine\\Common\\Collections\\Criteria
) 来从用户发布。
我假设你有这样的事情:
/**
* @ORM\OneToMany(targetEntity=Posts::class, mappedBy="users", cascade={"persist", "remove"})
*
*/
private $posts;
....
/**
* @return Posts[]|Collection
*/
public function getPosts(): Collection
{
return $this->posts;
}
所以你可以更新你的getPosts()
方法,如:
/**
* @param bool $ignoreDeleted
*
* @return Posts[]|Collection
*/
public function getPosts(bool $ignoreDeleted = true)
{
if($ignoreDeleted)
{
$crit = Criteria::create()->andWhere( Criteria::expr()->isNull('deletedAt') );
// $crit->orderBy(['createdAt' => Criteria::DESC]); // newest first
return $this->posts->matchin($crit);
}
return $this->posts;
}
有了它,你就有了更多的控制权。 如果您想“跳过”这些过滤,只需使用$someUser->getPosts(false);
调用该方法$someUser->getPosts(false);
这同样适用于树枝
{% for posts in user.post %}
...
{% endfor %}
会在$user
上自动调用getPost()
并且如果您出于某种原因需要全部明确{% for allPosts in user.getPosts(fasle) %}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.