2015-04-22 62 views
0

我有一個表tech_note,我想有3個表更多tech_note_es,tech_note_entech_note_fr(在未來更多的表)。 tech_note可以同時在3個表中。我可以使用MySQL設置Symfony2 ORM繼承關係嗎?

我的想法附加到tech_note_en並自動從tech_note接收屬性。

第二個編輯:

我想財產以後這樣的:我在Tech_note_EN by ID=3搜索(我recive從tech_note_EN with ID=3和領域tech_note with ID=3領域

但是,如果我在Tech_note_ES BY ID=3搜索(我recive從tech_note_ES with ID=3領域。和tech_note字段tech_note with ID=3相同的字段)

tech_note的ID = 3 Tech_note ote_EN具有ID = 3,和Tech_note_ES具有ID = 3

WITH新類編輯:

現在我有此錯誤: 實體 '的EVT \ FrontendBundle \實體\ Tech_note_en' 具有複合標識符,但用途除手動分配(身份,序列)之外的ID生成器。這不支持。

TECH_NOTE

abstract class Tech_note { 

     /** 
     * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 

    private $id; 


    /** 
    * @var datetime $control_date 
    * 
    * @ORM\Column(name="control_date", type="datetime") 
    */ 
    private $control_date; 

    /** 
    * @var string $comment 
    * 
    * @ORM\Column(name="comment", type="string") 
    */ 
    private $comment; 

TECH_NOTE_EN

class Tech_note_en extends Tech_note { 


    /** 
    * @var integer $tech_note_id 
    * 
    * @ORM\Id 
    * @ORM\Column(name="tech_note_id", type="integer") 
    * @ORM\OneToOne(targetEntity="tech_note") 
    * @ORM\JoinColumn(name="tech_note_id",referencedColumnName="id") 
    */ 
    private $tech_note_id;  

    /** 
    * @var text $symptom 
    * 
    * @ORM\Column(name="symptom", type="text") 
    */ 
    private $symptom; 

    /** 
    * @var text $cause 
    * 
    * @ORM\Column(name="cause", type="text") 
    */ 
    private $cause; 

    /** 
    * @var string $solution 
    * 
    * @ORM\Column(name="solution", type="string") 
    */ 
    private $solution; 


老班

TECH_NOTE

class Tech_note { 

    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 

    private $id; 


    /** 
    * @var datetime $control_date 
    * 
    * @ORM\Column(name="control_date", type="datetime") 
    */ 
    private $control_date; 

    /** 
    * @var string $comment 
    * 
    * @ORM\Column(name="comment", type="string") 
    */ 
    private $comment; 

TECH_NOTE_EN

class Tech_note_en 
{ 
    /** 
    * @var integer $tech_note_id 
    * 
    * @ORM\Id 
    * @ORM\Column(name="tech_note_id", type="integer") 
    * @ORM\OneToOne(targetEntity="tech_note") 
    * @ORM\JoinColumn(name="tech_note_id",referencedColumnName="id") 
    */ 
    private $tech_note_id;  

    /** 
    * @var text $symptom 
    * 
    * @ORM\Column(name="symptom", type="text") 
    */ 
    private $symptom; 

    /** 
    * @var text $cause 
    * 
    * @ORM\Column(name="cause", type="text") 
    */ 
    private $cause; 

    /** 
    * @var string $solution 
    * 
    * @ORM\Column(name="solution", type="string") 
    */ 
    private $solution; 
+0

您能否指定您在哪裏發現困難或預期的答案? –

+0

每種語言一個表感覺不對 - 您不需要修改數據庫結構來添加新的語言。你可以使用兩個相關的表:'tech_note'和'tech_note_lang'?我不認爲你在這裏也需要繼承。 – halfer

回答

0

這就是你的ORM的工作。

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

(這樣的事情^^)

1

有一個真棒解決您的問題,這是single table inheritance
這裏做的事情基本上與普通領域一箇中心表,並鏈接到其他表與特定領域。

在你的情況我會用這個建築模型:
抽象類的技術說明(抽象的普遍的實體,它包含公共字段)
類TechNoteEn擴展技術說明它繼承共同領域,並增加了具體的EN領域(特定實體)
等。

我覺得這是您問題的最佳架構解決方案。

+0

如果你需要設置單個表繼承的幫助,請讓我知道:) – pcm

+0

TY爲答案,但現在我有問題的ID(symfony錯誤是:實體'EVTS \ FrontendBundle \實體\ Tech_note_es'有一個複合標識符,但使用ID生成器而不是手動分配(標識,序列)。 –

+0

您已經從抽象中獲得了標識,將其從具體實體中刪除,也就是從TechNoteE中刪除字段$ id – pcm