如何为具有不同ID列的表设置类表继承' Doctrine 2中的名字?

时间:2017-08-19 17:49:05

标签: doctrine-orm orm doctrine class-table-inheritance

我有一个表<markers><marker postLink="https://steemit.com/travel/@martibis/when-the-road-calls-1"/></markers> person作为标识符列,表id student作为person_id。列PRIMARY KEY引用student.person_id FOREIGN KEY

因此有三个类:一个person.idabstract,其成员为Person,其子id没有任何&#34;标识属性&#34;

我试图为此结构定义Class Table Inheritance

Student

Person

use Doctrine\ORM\Mapping as ORM; /** * Parent * * @ORM\Table( * name="person" * ), * @ORM\Entity * @ORM\InheritanceType("JOINED") * @ORM\DiscriminatorColumn(name="type", type="string") */ abstract class Person { /** * @var integer * * @ORM\Column(name="id", type="integer", nullable=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; }

Student

但是当我尝试检索对象时

use Doctrine\ORM\Mapping as ORM;
/**
 * Student
 *
 * @ORM\Table(name="student")
 * @ORM\Entity
 */
class Student extends Person
{
}

我得到了一个例外。问题是,Doctrine假设,表$testRepo = $entityManager->getRepository(Student::class); $entities = $testRepo->findAll(); 的标识列具有名称students并构建id语句,如下所示:

SELECT

而不是

SELECT t1.id AS id_2,
       t1.... AS ..._3,
       ...
FROM student t0
INNER JOIN `person` t1 ON t0.id = t1.id

并遇到错误

SELECT t1.id AS id_2,
       t1.... AS ..._3,
       ...
FROM student t0
INNER JOIN `person` t1 ON t0.person_id = t1.id

对于新系统,最简单,最干净的方法可能是重命名Error Code: 1054 Unknown column 't0.id' in 'on clause' 列。但我目前正在将现有系统迁移到Doctrine 2,并且希望尽可能多地使用它,所以迁移还没有完成。

如何通过使用父标识符和子表的标识符(-s)的不同列名来定义Doctrine 2中的类表继承?

1 个答案:

答案 0 :(得分:-4)

(代表OP发布解决方案)

由于我迫切需要这个问题的解决方案,我通过将标识符列重命名为id来解决它(或更好:解决了)。