2017-08-04 60 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") 
*/ 

指定

相关问题