0

假设我的数据库中已经有 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() );
4

1 回答 1

0

你可以在一个mysql查询中做到这一点

UPDATE TABLE myTable
SET position = position + 1
WHERE position >= MyPosition

MyPosition 应该作为参数从 php 代码传递

于 2013-06-13T13:21:59.710 回答