2017-08-04 43 views
1

我是對的學說ORM新的,所以我努力學習的PS教程部分://knpuniversity.com/screencast/doctrine-queries/dql,但我仍然感到困惑的EXP:doctrine entityrepository如何工作?

SRC /AppBundle/Entity/Category.php

class Category 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255) 
    */ 
    private $name; 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="iconKey", type="string", length=20) 
    */ 
    private $iconKey; 
    /** 
    * @ORM\OneToMany(targetEntity="FortuneCookie", mappedBy="category") 
    */ 
    private $fortuneCookies; 

我們可以通過

01訪問構建方法

但如果我們想進入新的方法,我們可以爲存儲庫這樣做

$categoryRepository = $this->getDoctrine() 
      ->getManager() 
      ->getRepository('AppBundle:Category'); 
     $categories = $categoryRepository->findAllOrdered(); 

然後提供一流

的src /的appbundle /實體/ CategoryRepository.php

class CategoryRepository extends EntityRepository 
{ 
    public function findAllOrdered() 
    { 
     die('this query will blow your mind...'); 
    } 
} 

我還是不明白!

$categoryRepository = $this->getDoctrine() 
      ->getManager() 
      ->getRepository('AppBundle:Category'); 

如果上述點類別的實體,怎麼就突然可以鏈接到CategoryRepository,我們可以訪問findAllOrdered()方法?我錯過了什麼人請幫助?

+0

你缺少其中的類別實體鏈接到您的自定義類別庫中的一部分。 @AlbertoFecchi - 錯誤和誤導。版本庫前綴與任何內容無關。 https://symfony.com/doc/current/doctrine/repository.html – Cerad

+0

謝謝@Cerad現在我明白了邏輯/ ** * @ORM \ Entity(repositoryClass =「AppBundle \ Repository \ ProductCategory」) */ 班級類別 – kristyan

回答

1

正如幾位開發人員告訴你的,通過註釋將實體類與存儲庫類連接起來非常重要。

  • @ORM\Table(name="your_entity_name")
  • @ORM\Entity(repositoryClass="Your_RepositoryClass")

如果你想打電話給你的存儲庫的名稱更加個性(而不是 '的appbundle:類別' 如 'repository.category'),您可以創建一個服務通過一個yml文件。

1

據我所知,你使用的是註釋,很可能你有一個實體類的註釋。你只需要指定倉庫類是這樣的:

/** 
* @ORM\Entity(repositoryClass="AppBundle\Entity\CategoryRepository") 
* @ORM\Table(name="Category") 
*/ 

指定

相關問題