1. ホーム
  2. symfony

[解決済み] findAll Doctrine のメソッドを並べ替えるには?

2022-07-18 05:44:06

質問

Doctrine のドキュメントを読んでいますが、findAll() の結果をソートする方法を見つけることができません。

私は symfony2 + doctrine を使っており、これはコントローラ内で使用しているステートメントです。

$this->getDoctrine()->getRepository('MyBundle:MyTable')->findAll();

のようにしたいのですが、結果をユーザー名の昇順で並べたいのです。

このように配列を引数に渡そうとすると

findAll( array('username' => 'ASC') );

と表示されるのですが、うまくいきません(文句も出ません)。

DQLクエリを構築せずにこれを行う方法はありますか?

どのように解決するのですか?

Lighthartが示すように、それは可能です。しかし、それはコントローラに大きな脂肪を追加し、DRYではありません。

エンティティリポジトリで独自のクエリを定義する必要があります。

use Doctrine\ORM\EntityRepository;

class UserRepository extends EntityRepository
{
    public function findAll()
    {
        return $this->findBy(array(), array('username' => 'ASC'));
    }
}

次に、リポジトリでクエリを探すようにエンティティに指示する必要があります。

/**
 * @ORM\Table(name="User")
 * @ORM\Entity(repositoryClass="Acme\UserBundle\Entity\Repository\UserRepository")
 */
class User
{
    ...
}

最後に、コントローラで

$this->getDoctrine()->getRepository('AcmeBundle:User')->findAll();