私はテーブルperson
とid
を識別子欄に有し、テーブルstudent
はperson_id
をPRIMARY KEY
として持っています。列student.person_id
(FOREIGN KEY
)のperson.id
を参照してください。 abstract
クラスPerson
メンバーid
とそのサブクラッセ任意の「特定資産」なしStudent
を持つ:Doctrine 2で異なるID列の名前を持つテーブルにクラステーブルの継承を設定する方法は?
はそれに応じて三つのクラスがあります。
私はこのような構造のためClass Table Inheritance
を定義しようとしている:
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
{
}
しかし、私はオブジェクトを取得しようとすると
$testRepo = $entityManager->getRepository(Student::class);
$entities = $testRepo->findAll();
例外が発生します。問題はDoctrineは名前id
を持っており、このようなSELECT
声明構築するために、テーブルstudents
の識別列を想定して、次のとおりです。
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'
新しいシステムの場合、student.person_id
列の名前を変更するのが最もシンプルでクリーンな方法です。しかし、私は現在、既存のシステムをDoctrine 2に移行しており、できるだけ多くのことを可能な限り放棄したいと考えています。移行がまだ完了していない限り、
親の識別子と子テーブル(-s)の識別子に異なる列名を使用してDoctrine 2でクラステーブルの継承を定義する方法はありますか?
問題ではなく、* answersセクション*に解決策(回避策であっても)を入力してください。以前は正しく削除されていました。削除してください。あなたは下の答えとしてそれを投稿することは自由です。 –