Symfony API平台实体继承

时间:2019-08-09 21:43:58

标签: php symfony doctrine api-platform.com

我的项目在实体和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
}

1 个答案:

答案 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;
}
相关问题