0
我在Symfony中遇到問題。我有兩個實體具有一對多的關係:如何在排除某個日期的元素的OneToMany關係中創建DQL查詢?
/**
* Field
*
* @ORM\Table(name="field")
* @ORM\Entity(repositoryClass="MyBundle\Repository\FieldRepository")
*/
class Field
{
.
.
.
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @ORM\OneToMany(targetEntity="Booking", mappedBy="field", cascade={"remove","persist"})
*/
private $bookings;
和:
/**
* Booking
*
* @ORM\Table(name="booking")
* @ORM\Entity(repositoryClass="MyBundle\Repository\BookingRepository")
*/
class Booking
{
.
.
.
/**
* @var \DateTime
*
* @ORM\Column(name="date", type="datetime", nullable = true)
*/
private $date;
/**
* @ORM\ManyToOne(targetEntity="Field", inversedBy="bookings")
* @ORM\JoinColumn(name="field_id", referencedColumnName="id")
*/
private $field;
而且我想這是免費的(不預訂)在某一特定日期的字段。我嘗試這樣做:
public function findFreeFields($date){
$em = $this->getEntityManager();
$queryText = "SELECT f, FROM MyBundle:Field f JOIN f.bookings b ";
$queryText .= "WHERE b.date!=:date";
$query = $em->createQuery($queryText);
$query->setParameter('date', $date);
return $query->getResult();
的問題是,如果,例如,我有一個名爲「字段1」與4個預訂和預訂者之一是日期20/05/2017領域。我在那天查找所有的字段(2017年5月20日)和findFreeFields()
,但是我重複了三次「field1」,這顯然是錯誤的。 「field1」不能在結果列表中,因爲它在指定的日期被預訂。
用DISTINCT我沒有得到重複的結果,但仍然在結果中得到「field1」。
public function findFreeFields($date){
$em = $this->getEntityManager();
$queryText = "SELECT DISTINCT f, FROM MyBundle:Field f JOIN f.bookings b ";
$queryText .= "WHERE b.date!=:date";
$query = $em->createQuery($queryText);
$query->setParameter('date', $date);
return $query->getResult();
那麼,如何做我必須寫DQL查詢,以排除具有在特定日期預訂領域?
謝謝,它的工作! – Redleafar