dtbi27903 2014-09-29 08:20
浏览 26

与学说中的STI继承有关

I have problems associating an entity with another using a OneToOne Association, where one entity is an instance of a Single-Table-Inheritance subclass.

I have one superclass, let's call it Animal, and some subclasses, e.g. Cat, Dog. The animal contains an object_id column which points to the ID of the owner and a discriminator column type which points to the subclass (cat or dog).

I also have different entities which have one-to-one associations with one of the subclasses.

  • CatLady 1 <-> 1 Cat (OK, bad example.. A Cat lady should own more than just one cat)
  • DogOwner 1 <-> 1 Dog

Code:

/**
 * Animal
 *
 * @ORM\Table("animal")
 * @ORM\Entity()
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="type", type="integer")
 * @ORM\DiscriminatorMap({0 = "Cat", 1 = "Dog"})
 */
abstract class Animal { 
 /**
  * @var integer
  * @ORM\Id()
  * @ORM\Column(name="id", type="integer")
  */
 protected $id;

 /**
  * @var integer
  *
  * @ORM\Column(name="object_id", type="integer")
  */
  protected $object_id;
}

/**
 * Cat
 *
 * @ORM\Entity()
 */
class Cat extends Animal {}

/**
 * CatLady
 * @ORM\Entity()
 */
class CatLady {
  /**
   * @var Cat
   *
   * @ORM\OneToOne(targetEntity="\Path\To\Entity\Cat")
   * @ORM\JoinColumn(name="id", referencedColumnName="object_id", nullable=true))
   */
  private $cat;
}

Problem: Before updating Doctrine from 2.3 to 2.4.5 it worked, but after I always got a Primary Key Value is Missing Exception. Now I am trying to figure out how to create this association between the CatLady and the Cat. The association may be unidirectional.

I guess the problem is, that the object_id is not an primary key - which is not possible because it is not unique (only object_id and type would be unique, but the discriminator cannot be part of the primary key...).

Any solutions?

Update: Maybe some more information will help: As mentioned I am using Doctrine 2.4.5 and Symfony2.2. The last working version was with Doctrine 2.3 and Symfony2.1. The column object_id is neither a Primary Key nor a Foreign Key, because it is not unqiue and points to different classes/tables. This is maybe not the best database design, but I can't change it.

Table: Animal
+----------------+---------+------+-----+---------+----------------+
| Field          | Type    | Null | Key | Default | Extra          |
+----------------+---------+------+-----+---------+----------------+
| id             | int(11) | NO   | PRI | NULL    | auto_increment |
| object_id      | int(11) | NO   | MUL | NULL    |                |
| object_type    | int(11) | NO   |     | NULL    |                |
+----------------+---------+------+-----+---------+----------------+

The tables for CatLady and DogOwner don't have a column pointing to Animal.

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 matlab数字图像处理频率域滤波
    • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
    • ¥15 ELGamal和paillier计算效率谁快?
    • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
    • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
    • ¥15 Arcgis相交分析无法绘制一个或多个图形
    • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
    • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
    • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
    • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误