5

Articles エンティティのリポジトリを作成し、ID DESC で並べ替えられたすべての値を取得しようとしています。ただし、id ASC で並べ替えられた値を毎回取得します。これが私のものArticleRepository.phpです:

<?php

namespace Acme\BlogBundle\Entity;

use Doctrine\ORM\EntityRepository;

class ArticleRepository extends EntityRepository
{
    public function findAll()
    {
        return $this->findBy(array(), array('id' => 'DESC'));
    }

    public function findOneBySlug($slug)
    {
        $query = $this->getEntityManager()
                      ->createQuery('
                          SELECT p FROM AcmePagesBundle:Article a
                          WHERE a.slug = :slug
                      ')
                      ->setParameter('slug', $slug);

        try {
            return $query->getSingleResult();
        } catch (\Doctrine\ORM\NoResultException $e) {
            return false;
        }
    }
}

何か案は?

4

5 に答える 5

1

これはうまくいくはずです:

public function findAll()
{
    $em = $this->getEntityManager();

    $query = $em->createQuery('
        SELECT *
        FROM AcmePagesBundle:Article a
        ORDER BY a.id DESC
    ');

    return $query->getResult();
}
于 2013-10-18T12:55:40.517 に答える
0

私は自分のリポジトリでこれを行う傾向があります (リポジトリ内の異なるメソッドで同じ選択 DQL を使用できるようにするため - 特に、含めるフェッチ結合がたくさんある場合):

class FooRepository extends EntityRepository
{
    /**
     * Get the DQL to select Foos with all joins
     *
     * @return string
     */
    public function getSelectDql()
    {
        $dql = '
               SELECT f
                 FROM Entity:Foo f
        ';

        return $dql;
    }

    /**
     * Fetch all foos, ordered
     *
     * @return array
     */
    public function fetchAllOrdered()
    {
        $dql = sprintf(
            '%s %s',
            $this->getSelectDql(),
            'ORDER BY f.id DESC'
        );

        return $this->getEntityManager()
            ->createQuery($dql)
            ->getResult();
    }
}

これにより、リポジトリが非常に柔軟になり、異なるメソッドで異なる順序を使用できるようになり (異なる順序にする必要がある場合)、DB 関連のすべてのコードがコントローラーから除外されます。

于 2013-10-18T13:20:39.710 に答える
0

symfony3.3の順序による検索の動作例。

コントローラーから:

public function indexAction(){
     $entityManager = $this->getDoctrine()->getManager();
     $categoryRepository = $entityManager->getRepository(ProductCategory::class); 
     $items = $categoryRepository->findBy(array(), array('id' => 'DESC'));
     ....
}
于 2017-06-04T14:01:57.107 に答える