Mapeamento com doctrine ORM
Pessoal, em anexo segue meu modelo de banco de dados (duas tabelas). Estou utilizando doctrine. Este é um modelo resumido para eu tentar explicar o que estou passando.
As minhas classes Banner e Menu extendem de classes diferentes (ClasseX e ClasseY) e estas classes Banner e Menu, como voces podem ver possuem um Link que pode ser para uma categoria, artigo ou linkexterno (http://outrosite.com). Dai surgiu essa necessidade de min criar uma classe Link. Porem na minha opiniao é inviavel eu criar uma tabela no banco de dados para armazenar link, ou seja, a classe link não chega ser uma entidade concreta (tabela), seria apenas coluna no BD e para cada tipo de Link há uma estrategia para gerar o seu respectivo LinkURL, conforme pode ser observado na classe Link.
Pensei em fazer class Menu extends Link e class Banner extends Link, porem as classes banner e menu ja extendem de outras classes e como o PHP não aceita herança multipla não tem como.
enfim, como faço para mapear a classe Link para este modelo de banco de dados meu?
<?php
/**
* @ORM\Entity
*/
class Banner extends ClasseX{
/**
* @ORM\Id
*/
private $id;
/**
* @ORM\Column('type=string')
*/
private $descricao;
private $link;
protected setLink(Link $link){
$this->link = $link;
}
protected getLink(){
return $this->link;
}
}
<?php
/**
* @ORM\Entity
*/
class Menu extends ClasseY{
/**
* @ORM\Id
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $descricao;
protected $link;
protected setLink(Link $link){
$this->link = $link;
}
protected getLink(){
return $this->link;
}
}
<?php
class Link{
const TIPO_ARTIGO=1;
const TIPO_CATEGORIA=2;
const TIPO_LINKEXTERNO=3
protected $tipo_link;
protected $categoria;
protected $artigo;
proctected $linkexterno;
public function setLink($link){
if(is_object($link)){
switch(get_class($link)){
case Artigo::class:
$this->tipo = self::TIPO_ARTIGO;
$this->artigo = $link;
break;
case Categoria::class:
$this->tipo = self::TIPO_CATEGORIA;
$this->categoria = $link;
break;
}
}else{
$this->tipo = self::TIPO_LINKEXTERNO;
$this->linkexterno = $link;
}
}
public function getLinkUrl(){
switch($this->tipo_link){
case self::TIPO_ARTIGO;
return $this->makeUrlToArtigo();
break;
case self::TIPO_CATEGORIA;
return $this->makeUrlToCategoria();
break;
case self::TIPO_LINKEXTERNO;
return $this->linkexterno;
}
}
}

Discussão (0)
Carregando comentários...