我有一个表<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.id
类abstract
,其成员为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中的类表继承?
答案 0 :(得分:-4)
(代表OP发布解决方案)。
由于我迫切需要这个问题的解决方案,我通过将标识符列重命名为id
来解决它(或更好:解决了)。