首页 > 解决方案 > Symfony/Api Platform/Schema Generator:定义双向多对多关系

问题描述

我尝试了几个小时来理解Schema Generator Component中的关系,我阅读了文档,但我被关于字段基数强制关系表名称mappedBy完整配置参考中的inversedBy属性的糟糕细节困住了

我只是想生成两个具有ManyToMany教义关系的实体。我的示例中的两个对象是Person& Organization

Person::$memberOf是组织的集合(可选) Organization::$members是具有至少一个人的人员的集合

我的config/schema.yaml文件:

types:
    Person:
        properties:
            memberOf:
                cardinality: (0..*)
                inversedBy: "members"
                range: "Organization"
                relationTableName: organization_person

    Organization:
        properties:
            members: 
                cardinality: (1..*)
                mappedBy: "memberOf"
                range: "Person"

添加基数后(我尝试了很多组合......)你看到上面的命令不再为我生成默认ManyToOne关系,但根本没有关系,而是一个带有 json 类型的 ORM 注释

人.php

/**
 * @ApiProperty(iri="http://schema.org/memberOf")
 * @ORM\Column(type="json", nullable=true)
 * An Organization (or ProgramMembership) to which this Person or Organization belongs.
 *
 * @see http://schema.org/memberOf
 */
private ?Collection $memberOf = null;

组织.php

/**
 * @ApiProperty(iri="http://schema.org/members")
 * @ORM\Column(type="json", nullable=true)
 * A member of this organization.
 *
 * @see http://schema.org/members
 */
private ?Collection $members = null;

我期待这样的事情:

Class Person {

    /**
     * @ApiProperty(iri="http://schema.org/memberOf")
     * @ORM\ManyToMany(targetEntity="App\Entity\Organization", inversedBy="members")
     * @JoinTable(name="organization_person")
     */
    private ?Collection $memberOf = null;
    
    // ...
}

Class Organization {

    /**
     * @ApiProperty(iri="http://schema.org/member")
     * @ORM\ManyToMany(targetEntity="App\Entity\Person", mappedBy="memberOf")
     */
    private ?Collection $members = null;

    // ...
}

请有人告诉我我在这里做错了什么。

标签: phpsymfonyschema.orgapi-platform.com

解决方案


推荐阅读