[英]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.