Symfony2将实体映射到不同的表

时间:2013-04-16 12:54:08

标签: php database symfony doctrine mapping

我的实体foo包含属性idbarbaz。我是否可以根据未映射的属性foo1,使用相同的实体填充两个不同的表(如foo2baz)。实体的代码如下所示:

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,则保存在表{{ 1}}。我在哪里可以选择保存哪个表?

2 个答案:

答案 0 :(得分:3)

使用学说继承:

Doctrine inheritance

它的工作原理如下:

BaseClient

  • SubClient1从BaseClient扩展
  • SubClient2从BaseClient扩展

就像那样,您甚至可以添加额外的字段,让我们说SubClient1或SubClient2只针对该实体。

答案 1 :(得分: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

请随意编辑/更正,我在这方面很新,但我认为这个想法可能会有所帮助。