我可以使用MySQL建立Symfony2 ORM继承关系吗



我有一个表tech_note,我想再有三个表tech_note_estech_note_entech_note_fr(将来会有更多的表)。并且tech_note可以同时在这三个表中。

我的想法是附加到tech_note_en并自动从tech_note接收属性。

第二版:

我想要这样的东西:我在Tech_note_EN by ID=3中搜索(我收到来自tech_note_EN with ID=3的字段和tech_note with ID=3的字段。

但如果我在Tech_note_ES BY ID=3中搜索(我从tech_note_ES with ID=3接收字段,从tech_note with ID=3接收技术注释字段(与上面的字段相同)

技术注释的ID=3。Tech_note_EN具有ID=3,Tech_note_ES具有ID=3

使用新类别编辑

现在我有这个错误:实体"EVTS\FrontendBundle\Entity\Tech_note_en"具有复合标识符,但使用的ID生成器不是手动分配(Identity,Sequence)。不支持此操作。

技术注意

abstract class Tech_note {
/**
* @var integer $id
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var datetime $control_date
* 
* @ORMColumn(name="control_date", type="datetime")
*/
private $control_date;
/**
* @var string $comment
*
* @ORMColumn(name="comment", type="string")
*/
private $comment;

TECH_NOTE_EN

class Tech_note_en extends Tech_note {

/**
* @var integer $tech_note_id
*
* @ORMId
* @ORMColumn(name="tech_note_id", type="integer")
* @ORMOneToOne(targetEntity="tech_note")
* @ORMJoinColumn(name="tech_note_id",referencedColumnName="id")
*/
private $tech_note_id;    
/**
* @var text $symptom
*
* @ORMColumn(name="symptom", type="text")
*/
private $symptom;
/**
* @var text $cause
*
* @ORMColumn(name="cause", type="text")
*/
private $cause;
/**
* @var string $solution
*
* @ORMColumn(name="solution", type="string")
*/
private $solution;


旧类

技术注意

class Tech_note {
/**
* @var integer $id
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var datetime $control_date
* 
* @ORMColumn(name="control_date", type="datetime")
*/
private $control_date;
/**
* @var string $comment
*
* @ORMColumn(name="comment", type="string")
*/
private $comment;

TECH_NOTE_EN

class Tech_note_en
{
/**
* @var integer $tech_note_id
*
* @ORMId
* @ORMColumn(name="tech_note_id", type="integer")
* @ORMOneToOne(targetEntity="tech_note")
* @ORMJoinColumn(name="tech_note_id",referencedColumnName="id")
*/
private $tech_note_id;    
/**
* @var text $symptom
*
* @ORMColumn(name="symptom", type="text")
*/
private $symptom;
/**
* @var text $cause
*
* @ORMColumn(name="cause", type="text")
*/
private $cause;
/**
* @var string $solution
*
* @ORMColumn(name="solution", type="string")
*/
private $solution;

您的问题有一个很棒的解决方案,那就是单表继承
这基本上是有一个带有通用字段的中心表,并链接到另一个带有特定字段的表

在您的情况下,我将使用以下体系结构模型:
抽象类TechNote(抽象公共实体,包含公共字段)
>class TechNoteEn扩展TechNote继承公共字段并添加特定EN字段的特定实体)
等等。

我认为这是解决您问题的最佳体系结构解决方案。

这是ORM的工作。

// Assuming $tech_note_en is a Tech_note_en instance
$tech_note_en->getTechNote();

(像这样^^)

最新更新