使用position属性在数据库中插入新实体或从中删除实体

时间:2013-06-13 13:17:44

标签: php symfony symfony-2.3

所以说,我已经在我的数据库中有20个实体,每个实体都有一个位置属性来显示我的网站上首先出现的实体。

如果我添加一个实体,我想实际将位置放在第一位,所以位置最小为0,因为这将是我最新的实体。

OR

如果我删除了一个实体,我希望其他实体能够适应这一点并填补这一空白。

虽然数据库中已有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() );

1 个答案:

答案 0 :(得分:0)

你可以在一个mysql查询中完成它

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

位置应作为PHP代码

的参数传递