0

たとえば、データベースには既に 20 個のエンティティがあり、それぞれが自分の Web サイトで最初に来るエンティティを表示する位置属性を持っています。

エンティティを追加する場合、実際には位置を最初にしたいので、これが私の最新のエンティティになるため、位置は少なくとも 0 になります。

また

エンティティを削除すると、他のエンティティがこれに適応してギャップを埋めるようになります。

データベースには、位置が 0 ~ 19 のエンティティが既に 20 個あります。

すべての位置を再配置できるため、位置属性があります。

これについてどうすればいいですか?

すべてのエンティティを取得し、それらを繰り返して新しいエンティティの位置に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

1 つの mysql クエリで実行できます

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

MyPosition は、php コードからパラメータとして渡す必要があります

于 2013-06-13T13:21:59.710 に答える