2013-04-16 117 views
3

我有我的實體foo它包含屬性id,barbaz。根據未映射的屬性baz,我可以使用相同的實體填充兩個不同的表(如foo1foo2)嗎?實體的代碼如下所示:Symfony2映射實體到不同的表

class foo { 

    /** 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    */  
    private $id; 

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

    /** 
    * Property not mapped in the database 
    */ 
    private $baz; 
} 

我想如果baz值是1,拯救實體表foo1,而如果baz值是2,表中foo2保存。我可以在哪裏選擇要保存的表格?

+1

你能向我們解釋你想達到的目標嗎?也許我們可以給你一個提示。 – stedekay

+0

感謝您的關注!實際上,我每天爲這個實體'foo'輸入很多條目,所以我想將它們分成多個表格。例如,我會將經常使用的信息存儲在第一個表格中,而將信息不經常用於第二個表格中。希望這有助於:) –

+0

我沒有看到好處。如果你必須區分'foo1'和'foo2'的條目,但是它們是同一個實體,爲什麼不保存'baz'屬性並將其用於查詢? – stedekay

回答

3

使用原則繼承:

Doctrine inheritance

它的工作原理是這樣的:

BaseClient

  • SubClient1從BaseClient
  • SubClient2從BaseClient
擴展延伸

就像那樣,你甚至可以添加額外的字段來讓我們說SubClient1或SubClient2誰是特定於該實體。

0

你絕對需要你的$ baz屬性嗎?你如何確定它?

因爲一個簡單的解決方案可能會幫助您創建一個抽象foo類,然後是2個從它繼承並且執行數據庫關係的類。

這裏是例子:

abstract class foo { 

    /** 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    */  
    protected $id; 

/** 
* @ORM\Column(name="bar", type="string") 
*/ 
protected $bar; 
} 


/* @ORM\Table(name="foo1") 
* @ORM\Entity(repositoryClass="yourRepo") 
*/ 
foo1 extends foo{ 
} 

/* @ORM\Table(name="foo2") 
* @ORM\Entity(repositoryClass="yourRepo") 
*/ 
foo2 extends foo{ 
} 

雖然我不知道它的工作原理簡單,因爲這,但也許它可以幫助。

一些文檔,可以幫助做這個: http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html

請隨意編輯/正確的,我在這個相當新的,但我認爲這個想法可能會有所幫助。

+0

謝謝你的回答,不幸的是,我不能使用這個解決方案,因爲我沒有隻有兩個「表格」。我在我的問題中只列出了兩個,以便更容易理解,但從foo1到foo10可以有10個。 –

+0

好的,您可以按照Gremo在上次評論中所建議的那樣使用「hack」,這些文檔可能有助於實現此目的: http://symfony2.ylly.fr/dynamically-add-mapping-to-doctrine2-using- annotations-dantleech/ http://www.doctrine-project.org/api/orm/2.3/source-class-Doctrine.ORM.Mapping.ClassMetadataInfo.html#1354-1382 – MisterJ