3

我有我的实体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; 
}

如果值为baz1,我希望将实体保存在表中foo1,如果值为baz2,则保存在表中foo2。我在哪里可以选择它将保存在哪个表中?

4

2 回答 2

3

使用学说继承:

教义传承

它是这样工作的:

基本客户端

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

像这样,您甚至可以添加额外的字段,比如仅针对该实体的 SubClient1 或 SubClient2。

于 2013-04-16T14:19:28.980 回答
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

请随时编辑/更正,我对此很陌生,但我认为这个想法可能会有所帮助。

于 2013-04-16T14:20:56.080 回答