Solo quiero el primero de la lista, ya que solo habrá uno, pero bueno el problema sería el mismo si los quisiera todos.
Lo de la A lo havia puesto para que fuera mas leible el codigo, en verdad es así:
Esta es la entidad D:
Código PHP:
Ver original<?php
namespace Axon\BackendEstacionsBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\Collection;
use Symfony\Component\Validator\Constraints
as Assert; use Symfony\Bridge\Doctrine\Validator\Constraints as DoctrineAssert;
use Axon\BackendBundle\Entity\Pujable;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity
* @ORM\Table(name="estacio")
* @ORM\Entity(repositoryClass="Axon\BackendEstacionsBundle\Entity\EstacioRepository")
*/
class Estacio extends Pujable {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
protected $id;
/**
* @ORM\Column(type="string", length=255)
* @Assert\NotBlank()
*/
protected $nombre;
/**
* @ORM\ManyToOne(targetEntity="\Axon\BackendSectorsBundle\Entity\Sector", inversedBy="estacions")
* @ORM\JoinColumn(name="sector_id", referencedColumnName="id")
*/
private $sector;
/**
* @ORM\OneToMany(targetEntity="\Axon\BackendSmartisBundle\Entity\Smarti", mappedBy="estacio")
*/
private $smartis;
/**
* Get id
*
* @return integer
*/
public function getId() {
return $this->id;
}
/**
* Set nom
*
* @param string $nombre
*/
public function setNombre($nom) {
$this->nombre = $nombre;
}
/**
* Get nombre
*
* @return string
*/
public function getNombre() {
return $this->nombre;
}
/**
* Set sector
*
* @param Axon\BackendSectorsBundle\Entity\Sector $sector
*/
public function setSector(\Axon\BackendSectorsBundle\Entity\Sector $sector) {
$this->sector = $sector;
}
/**
* Get sector
*
* @return Axon\BackendSectorsBundle\Entity\Sector
*/
public function getSector() {
return $this->sector;
}
/**
* Set latitud_sector_sin
*
* @param string $latitudSectorSin
*/
public function setLatitudSectorSin($latitudSectorSin) {
$this->latitud_sector_sin = $latitudSectorSin;
}
/**
* Get latitud_sector_sin
*
* @return string
*/
public function getLatitudSectorSin() {
return $this->latitud_sector_sin;
}
/**
* Set longitud_sector_sin
*
* @param string $longitudSectorSin
*/
public function setLongitudSectorSin($longitudSectorSin) {
$this->longitud_sector_sin = $longitudSectorSin;
}
/**
* Get longitud_sector_sin
*
* @return string
*/
public function getLongitudSectorSin() {
return $this->longitud_sector_sin;
}
//gets per les estacions
public function getSmartiByTipus($tipus) {
$this->smartis->initialize();
foreach ($this->smartis as $smarti) {
if ($smarti->getTipo() == $tipus) {
return $smarti;
}
}
return null;
}
public function __construct() {
$this->smartis = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add smartis
*
* @param Axon\BackendSmartisBundle\Entity\Smarti $smartis
*/
public function addSmarti(\Axon\BackendSmartisBundle\Entity\Smarti $smartis) {
$this->smartis[] = $smartis;
}
/**
* Get smartis
*
* @return Doctrine\Common\Collections\Collection
*/
public function getSmartis() {
return $this->smartis;
}
}
I la entidad A sería la siguiente:
Código PHP:
Ver original<?php
namespace Axon\BackendSmartisBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\Collection;
use Symfony\Component\Validator\Constraints
as Assert; use Symfony\Bridge\Doctrine\Validator\Constraints as DoctrineAssert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity
* @ORM\Table(name="smarti")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="tipo", type="integer")
* @ORM\DiscriminatorMap({"1" = "SmartiControlNeu", "2" = "SmartiControlVent", "3" = "SmartiControlUva"})
* @ORM\Entity(repositoryClass="Axon\BackendSmartisBundle\Entity\SmartiRepository")
*/
abstract class Smarti {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $nom;
/**
* @ORM\Column(type="boolean")
*/
private $is_public;
/**
* @ORM\OneToOne(targetEntity="Axon\BackendEstacionsBundle\Entity\Estacio", inversedBy="smartis")
* @ORM\JoinColumn(name="estacio_id", referencedColumnName="id")
*/
private $estacio;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set nom
*
* @param string $nom
*/
public function setNom($nom)
{
$this->nom = $nom;
}
/**
* Get nom
*
* @return string
*/
public function getNom()
{
return $this->nom;
}
/**
* Set estacio
*
* @param Axon\BackendEstacionsBundle\Entity\Estacio $estacio
*/
public function setEstacio(\Axon\BackendEstacionsBundle\Entity\Estacio $estacio)
{
$this->estacio = $estacio;
}
/**
* Get estacio
*
* @return Axon\BackendEstacionsBundle\Entity\Estacio
*/
public function getEstacio()
{
return $this->estacio;
}
/**
* Set is_public
*
* @param boolean $isPublic
*/
public function setIsPublic($isPublic)
{
$this->is_public = $isPublic;
}
/**
* Get is_public
*
* @return boolean
*/
public function getIsPublic()
{
return $this->is_public;
}
public abstract function getTipo();
}
I por ejemplo la C sería:
Código PHP:
Ver original<?php
namespace Axon\BackendSmartisBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\Collection;
use Symfony\Component\Validator\Constraints
as Assert; use Symfony\Bridge\Doctrine\Validator\Constraints as DoctrineAssert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity
* @ORM\Table(name="smarti_control_uva")
*/
class SmartiControlUva extends Smarti {
public function getTipo() {
return "uva";
}
}
Luego en el controller hago lo siguiente:
Código PHP:
Ver original$a = $estacio->getSmartiByTipus("vent");
$b = $estacio->getSmartiByTipus("neu");