如何在 Doctrine 中建立多对一关系?
Posted
技术标签:
【中文标题】如何在 Doctrine 中建立多对一关系?【英文标题】:How to set up a Many-To-One Relation in Doctrine? 【发布时间】:2019-01-25 12:59:12 【问题描述】:我正在 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-One
或Many-To-Many
),它也很好。但我不能使用Many-To-One
(或One-To-Many bidirectional
)。
手动 DQL 查询不起作用。
我在这个问题上坐了两天多,希望你能帮助我。
【问题讨论】:
【参考方案1】:要获得包含教义的存储库,您必须传递一个教义实体的名称。我知道这样做的两种方法(与您的情况有关):
use App\Entity\Section;
$rep = $entityManager->getRepository(Section::class);
$rep = $entityManager->getRepository("App\Entity\Section"); // Path is depending of your application's structure
【讨论】:
我认为它是由 autoload.php 完成的?为什么我不必与制造商合作? 也许你错过了控制器中的使用指令(使用 App\Entity\Section)? 但是为什么我必须手动做呢?我也不和制造商一起做。但它在那里工作。我现在不能尝试,但我猜应该不是问题:s 如果控制器顶部已经有制造商的使用指令(使用 App\Entity\Manufacturer;),那么你可以只写 $entityManager->getRepository("Manufacturer"); .否则你必须写 $entityManager->getRepository("App\Entity\Manufacturer"); 我没有任何实体的使用指令。我只有这个: $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);在 $paths 中,有我的实体 php 文件。因此,如果我执行“ $entityManager->getRepository("Manufacturer") 它正在工作,但不适用于 $entityManager->getRepository("Section")...以上是关于如何在 Doctrine 中建立多对一关系?的主要内容,如果未能解决你的问题,请参考以下文章