簡體   English   中英

Symfony2,Doctrine2,findBy()命令不起作用

[英]Symfony2, Doctrine2, findBy() order not working

我為我的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;
        }
    }
}

有任何想法嗎?

語法看起來不錯。 這應該提供一組很好的文章。

首先,確保在文章實體中使用正確的Repository類設置@Entity注釋,

/**
 * @ORM\Entity(repositoryClass="...");
 */
class Article
{
    // ...
}

此外,如果您想使用本機助手,您只需從控制器中的ArticleRepository調用findBy

 $articles = $this->get('doctrine')
      ->getRepository('YourBundle:Article')
      ->findBy(array(), array('id' => 'DESC'));

您無需在ArticleRepostory.php中為此創建查詢

在您的控制器中,您可以這樣做:

$entities = $em->getRepository('YourBundle:Article')->findBy(array(), array( 'id' => 'DESC' ));

->findBy(array(), array( 'id' => 'DESC' )); // Order Works  
->findAll(array(), array( 'id' => 'DESC' )); // Order doesn't work

這應該是有效的:

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

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

    return $query->getResult();
}

我傾向於在我的存儲庫中執行此操作(以允許在存儲庫中的不同方法中使用相同的選擇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相關的代碼保留在控制器之外。

Symfony 3.3按訂單工作示例查找。

從您的控制器:

public function indexAction(){
     $entityManager = $this->getDoctrine()->getManager();
     $categoryRepository = $entityManager->getRepository(ProductCategory::class); 
     $items = $categoryRepository->findBy(array(), array('id' => 'DESC'));
     ....
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM