如何在学说中建立多对一关系?

时间:2019-01-25 12:59:12

标签: php orm doctrine

我正在Doctrine中建立一个新数据库,我想使用一个Many-To-One关系。 数据库工作得很好,但是我不能在这些类中使用查询。

我遵循了以下文档:

/**
 * @Entity @Table
 **/
class Section
{
    /**
     * @Id @Column(type="integer") @GeneratedValue
     **/
     protected $id;

     //... 

     /**
     * @ManyToOne(targetEntity="Manufacturer")
     */
    private $manufacturer;

    //...
}

/**
 * @Entity
 **/
class Manufacturer
{   
    /**
     * @Id @Column(type="integer") @GeneratedValue
     **/
    protected $id;  
    //...
}

所以我的问题是,我无法对Section使用任何查询。

要测试,我有一个小程序:

$relation = 'Section';

$rep = $entityManager->getRepository($relation); //here is the problem

$result = $rep->findAll();

foreach ($result as $row) {
    echo $row->getName();
}

如果我将$relation更改为'Manufacturer',则可以使用,或者如果我使用其他关系(One-To-OneMany-To-Many),也可以。但是我不能使用Many-To-One(或者使用One-To-Many bidirectional)。 手动DQL查询无效。

我在这个问题上坐了超过两天,希望您能为我提供帮助。

1 个答案:

答案 0 :(得分:0)

要获取具有学说的存储库,您必须传递学说实体的名称。我知道这样做的两种方式(与您的情况有关):

use App\Entity\Section;

$rep = $entityManager->getRepository(Section::class);

$rep = $entityManager->getRepository("App\Entity\Section"); // Path is depending of your application's structure