我的实体foo
包含属性id
,bar
和baz
。我是否可以根据未映射的属性foo1
,使用相同的实体填充两个不同的表(如foo2
和baz
)。实体的代码如下所示:
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}}。我在哪里可以选择保存哪个表?
答案 0 :(得分:3)
使用学说继承:
它的工作原理如下:
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
请随意编辑/更正,我在这方面很新,但我认为这个想法可能会有所帮助。