所以说,我已经在我的数据库中有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() );
答案 0 :(得分:0)
你可以在一个mysql查询中完成它
UPDATE TABLE myTable
SET position = position + 1
WHERE position >= MyPosition
位置应作为PHP代码
的参数传递