我在Doctrine2 @ORM \ OneToMany中有一个关系,假设我有表学校和学生,在实体学校我有@ORM \ OneToMany专栏学生 , 我还有一个虚拟删除列 deleted_at ,因此每个 deleted_at不同于null 的学生都是被删除的学生 @ORM \ OneToMany $ students 列中不显示。如何制作过滤器?
/**
* @var \Doctrine\Common\Collections\ArrayCollection
*
* @ORM\OneToMany(targetEntity="App\Oceano\Entities\Student",
* mappedBy="cartCore",
* cascade={"all"}
* )
*/
private $students;
所以,当我打电话给学校学生时,它也会检索已删除的学生。
$schoolObj->getStudents();
任何使用注释或一些干净更改的解决方案?
答案 0 :(得分:0)
你几乎描述了Laravel的soft deleting功能。因此,如果您使用它,您不需要做任何事情,软删除的学生将不会出现。您只需要将Illuminate\Database\Eloquent\SoftDeletes
特征添加到Student
模型。
如果您正在使用某些自己的功能,请在Student
模型中创建一个本地范围:
public function scopeNotDeleted($query)
{
return $query->whereNull('deleted_at');
}
并使用它:
Student::notDeleted()->get();
或者:
$school->students()->notDeleted()->get();
答案 1 :(得分:0)
您可以将实体中的Criteria
过滤器类用于未删除的学生集合
protected getStudents() {
$criteria = \Doctrine\Common\Collections\Criteria::create()
->where(\Doctrine\Common\Collections\Criteria::expr()->eq('deleted_at', null));
return $this->students->matching($criteria);
}
要删除已删除的学生,您可以将其写为
protected getDeletedStudents() {
$criteria = \Doctrine\Common\Collections\Criteria::create()
->where(\Doctrine\Common\Collections\Criteria::expr()->neq('deleted_at', null));
return $this->students->matching($criteria);
}
How filter data inside entity object in Symfony 2 and Doctrine