2016-07-25 73 views
0

我有表名爲post和列string名爲status與數據publishedpending。現在我想用EntityRepository類自定義方法從該表中提取所有行,或者只是修改現有的方法。如何查找所有查詢在Symfony 3 Doctrine

我已經試過這樣:

public function queryLatestPublished() 
{ 
    return $this->getEntityManager() 
     ->createQuery(' 
      SELECT p 
      FROM AppBundle:Post 
      WHERE p.staus == :st 
      ORDER BY p.created DESC 
     ') 
     ->setParameter('now', new \DateTime()) 
     ->setParameter('st', 'published') 
    ; 
} 

但查詢不返回任何東西。

+1

什麼是你試試這個問題(除非你有更多的參數設置比在查詢中使用)? – kero

+0

它是symfony2還是symfony3?您的標題和標籤不匹配。 – k0pernikus

+0

該代碼返回'Query'對象。您是否嘗試執行查詢?同樣在SQL和DQL中,相等運算符是'='not'=='。 – Crozin

回答

0

有一些錯誤/代碼中的問題

  • 的規定不符合預期
  • 你不打電話的getResult(或任何其他執行類似方法),這樣你實際上回報的數量參數號查詢對象
  • 我會改變方法的命名,因爲它是誤導

還我會改變

  • 你可能想使用selectfrom以某種方式限制
  • 結果的數量與QueryBuilder的工作時,如果你是實體庫裏面可以省略(在這種情況下,郵政)

我的命題:

/** 
* @param int $limit 
* @param int $offset 
* 
* @return Post[] 
*/ 
public function findNewestPublished($limit = 10, $offset = 0) 
{ 
    return $this->createQueryBuilder('p') 
     ->where('p.status = :status') 
     ->setParameter('status', 'published') 
     ->addOrderBy('p.createdAt', 'desc') 
     ->getQuery() 
     ->setFirstResult($offset) 
     ->setMaxResults($limit) 
     ->getResult(); 
} 

我希望這有助於