我的项目在实体和API平台上使用doctrine2类表继承来提供API端点。
/**
* @ORM\Entity(repositoryClass="App\Repository\PartyRepository")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({
* "org" = "Organization",
* "person" = "Person"
* })
* @ORM\HasLifecycleCallbacks()
*/
abstract class Party {}
/**
* @ApiResource()
* @ORM\Entity(repositoryClass="App\Repository\PersonRepository")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({
* "person" = "Person",
* "agent" = "Agent"
* })
* @ORM\HasLifecycleCallbacks()
*/
class Person extends Party {}
/**
* @ApiResource()
* @ORM\Entity(repositoryClass="App\Repository\AgentRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Agent extends Person {
private $affiliation;
}
问题是,当查看Person
的API平台模型时,它具有Agent::$affiliation
之类的所有子属性。
Agent {
affiliation string
name string
readOnly: true
familyName string
givenName string
id string
readOnly: true
createdAt string($date-time)
updatedAt string($date-time)
}
Person {
name string
readOnly: true
familyName string
givenName string
id string
readOnly: true
createdAt string($date-time)
updatedAt string($date-time)
affiliation string
}
答案 0 :(得分:0)
直接从docs for doctrine Class Table Inheritance下的“注意事项”:
必须在作为映射实体层次结构一部分的 top 类上指定@ InheritanceType,@ DiscriminatorColumn和@DiscriminatorMap
尝试以下操作,并更新架构
/**
* @ORM\Entity(repositoryClass="App\Repository\PartyRepository")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({
* "org" = "Organization",
* "person" = "Person",
* "agent" = "Agent"
* })
* @ORM\HasLifecycleCallbacks()
*/
abstract class Party {}
/**
* @ApiResource()
* @ORM\Entity(repositoryClass="App\Repository\PersonRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Person extends Party {}
/**
* @ApiResource()
* @ORM\Entity(repositoryClass="App\Repository\AgentRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Agent extends Person {
private $affiliation;
}