Problem: ¿How can I fetch all applications with a given status?
Hypothesis:
- The application's status is it's last event.
- Events have incremental IDs.
Events:
<?php
namespace DnD\RaHApiBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints\DateTime;
/**
* Event
*
* @ORM\Table()
* @ORM\Entity
*/
class Event
{
public function __construct($name = null, $type = null) {
if (isset($name)) $this->name = $name;
if (isset($type)) $this->type = $type;
$this->eventDate = date_create(date("Y-m-d\TH:i:sO"));
}
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="type", type="string", length=255, nullable=true)
* @Groups({"application_info"})
*/
private $type;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
* @Groups({"application_info"})
*/
private $name;
/**
* @var date of event.
*
* @ORM\Column(name="event_date", type="datetime")
* @Groups({"application_info"})
*/
private $eventDate;
...
}
Applications:
<?php
namespace DnD\RaHApiBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints\DateTime;
/**
* Solicitud de registro.
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="DnD\RaHApiBundle\Repository\ApplicationRepository")
*/
class Application
{
public function __construct()
{
$pending = new Event("PENDING", "APPLICATION");
$this->status = new ArrayCollection($pending);
}
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @Groups({"application_info"})
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
* @Groups({"application_info"})
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="dni", type="string", length=255)
* @Groups({"application_info"})
*/
private $dni;
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=255)
* @Groups({"application_info"})
*/
private $email;
/**
* @var string
*
* @ORM\ManyToMany(targetEntity="DnD\RaHApiBundle\Entity\Event", cascade={"persist"})
* @ORM\JoinTable(
* name="applications_events",
* joinColumns={@ORM\JoinColumn(name="application_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="event_id", referencedColumnName="id", unique=true)}
* )
* @Groups({"application_info"})
*/
private $status;
}
¿Is there a way to get an Application with a given "last status"?