假设我的数据库中已经有 20 个实体,每个实体都有一个位置属性来显示我的网站上首先出现的实体。
如果我添加一个实体,我实际上希望将位置设为第一个,因此该位置至少为 0,因为这将是我最新的实体。
或者
如果我删除一个实体,我希望其他实体对此进行调整并填补空白。
虽然数据库中已经有 20 个实体,位置从 0 到 19。
所有位置都可以重新排列,因此具有位置属性。
我该怎么办?
我知道一个解决方案,方法是获取所有实体并对其进行迭代以将它们在新实体上的位置加 1,或者在高于已删除实体的位置上减去 1,但这似乎有点过头了。
编辑:
感谢 SQL 的回答,我的回答是:
public function setPositions($position = 0){
$query = $this->createQueryBuilder()
->update('Entity', 'e')
->set('e.position', 'e.position + 1')
->where('e.position >= :position')
->setParameter('position', $position)
->getQuery();
$query->execute();
}
如果你把它放在你的实体的存储库中,你可以在你的控制器中调用它,比如:
$this->getRepository('Entity')->setPositions();
或者
$this->getRepository('Entity')->setPositions( $entityToBeDeleted->getPosition() );