Olá, Não uso Zend, mas uso Doctrine, então a dúvida é válida.
Eu tenho Duas Classes Filhas (Enterprise e BossSector) e uma referência para cada noutra classe (Sector).
Enterprise.php
/**
* @Entity
* @Table(name="Empresa")
* <b>Enterprise</b>
* Classe POJO que mantêm o Nome da Empresa(ou Hospital)
*/
class Enterprise extends EntityAbstract
{
/**
* @var integer @Id
* @Column(name="id", type="integer")
* @GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var String
* @Column(name="nm_empresa", type="string", length=255)
*/
protected $name;
public function __construct($id = 0, $name = "")
{
$this->id = $id;
$this->name = $name;
}
BossSector.php
* @Entity
* @Table(name="Responsavel_Setor")
* <b>BossSector</b>
* Classe POJO que contém os atributos de um Chefe de Setor,
* consistindo no seu Nome e E-mail
*/
class BossSector extends EntityAbstract
{
/**
* @var integer @Id
* @Column(name="id", type="integer")
* @GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var String
* @Column(name="nm_responsavel", type="string", length=255)
*/
protected $name;
/**
* @var String
* @Column(type="string", length=255)
*/
protected $email;
public function __construct($id = 0, $name = "", $email = "") {
$this->id = $id;
$this->name = $name;
$this->email = $email;
}
Sector.php
/**
* @Entity
* @Table(name="Setor")
* <b>Sector</b>
* Classe POJO responsável por manter os atributos da tabela Setor,
* onde constam o Nome do Setor, o Objeto dos Chefes de Setor(BossSector)
* e Objeto com as Empresas(Enterprise)
*/
class Sector extends EntityAbstract
{
/**
* @var integer @Id
* @Column(name="id", type="integer")
* @GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var String
* @Column(name="nm_setor", type="string", length=255)
*/
protected $name;
/**
* @ManyToOne(targetEntity="BossSector",cascade={"persist", "remove"})
* @JoinColumn(name="id_responsavel_setor")
*/
protected $BossSector;
/**
* @ManyToOne(targetEntity="Enterprise",cascade={"persist", "remove"})
* @JoinColumn(name="id_empresa")
*/
protected $Enterprise;
public function __construct($enterprise, $bossSector, $name = "", $id = 0) {
$this->id = $id;
$this->BossSector = $bossSector;
$this->Enterprise = $enterprise;
$this->name = $name;
}
E ao tentar inserir um novo Sector( )
ele insere uma nova linha para cada uma das Classes Filhas, no lugar de fazer referência.
Exemplo:
Enterprise: id:1, name:GustavoLTDA
BossSector: id:2 name="Gustavo"
Entao sento inserir novo setor
Sector: id:1, id_enterprise:2, id_bossSector:2
e uma nova linha com id: 2 "vazio" em cada uma das tabelas
Código da Model:
$e = new Enterprise(1, "GustavoLTDA");
$b = new BossSector(1, "Gustavo");
$s = new Sector($e, $b, 'ti');
$this->em->persist($s);
$this->em->flush();