Hola comunidad, buenas noches.
Estoy trabajando en un proyecto que administra propiedades (casas, departamentos, oficinas, etc). Tengo una entidad denominada "Alquileres" donde quedan registrados los alquileres que tuvo, tiene y que tendrá (en el caso de haberse registrado un alquiler a futuro) una propiedad. Es evidente que una de las restricciones fundamentales para la entidad "Alquileres" es que el rango de fecha (inicio de alquiler y fin de alquiler) no se superpongan, obviamente no puedo alquilar un inmueble a 2 personas distintas en una misma fecha.
Estoy trabado en este tema y no sé como implementarlo. Creo que debería hacerlo con @UniqueEntity... pero no tengo idea de como plantearlo.
Mi entidad tiene le siguiente código:
/** * Rent * * @ORM\Table(name="Rent") * @ORM\Entity(repositoryClass="MGI\EstateBundle\Entity\RentRepository") * @ORM\HasLifecycleCallbacks() * @Gedmo\SoftDeleteable(fieldName="deleted_at", timeAware=false) * UniqueEntity("name") * * @author GonzaLo (04/03/2018) */ class Rent extends EntityPattern { ... /** * @var \DateTime * * @ORM\Column(name="start_at", type="datetime", nullable=false) * @Assert\DateTime() * @Assert\NotNull() */ private $start_at; /** * @var \DateTime * * @ORM\Column(name="end_at", type="datetime", nullable=false) * @Assert\DateTime() */ private $end_at; /** * @var decimal * * @ORM\Column(name="price", type="decimal", scale=2, nullable=false) * @Assert\NotNull() * @Assert\Range(min=0,max=999999.99) */ private $price; /** * * @ORM\ManyToOne(targetEntity="MGI\EstateBundle\Entity\RentType") * @ORM\JoinColumn(name="rent_type_id", referencedColumnName="id") * @Assert\Type("MGI\EstateBundle\Entity\RentType") * * Assert\NotNull() */ private $rent_type; /** * * @ORM\ManyToOne(targetEntity="MGI\EstateBundle\Entity\Property", inversedBy="rent") * @ORM\JoinColumn(name="property_id", referencedColumnName="id") * @Assert\NotNull() * @Assert\Type("MGI\EstateBundle\Entity\Property") */ private $property; /** * * @ORM\ManyToOne(targetEntity="MSG\PersonBundle\Entity\Person") * @ORM\JoinColumn(name="renter_id", referencedColumnName="id") * @Assert\Type("MSG\PersonBundle\Entity\Person") */ private $renter; ...
Nota: Solo copié la parte que creo que es relevante de mi entidad.