0
我想用OneToMany關係查詢一個實體,但它不起作用,因爲子查詢DQL沒有很好地轉換。加入OneToMany的關係
我希望這個代碼:
$subquery = $manager->createQueryBuilder();
$subquery
->select('s.occupant')
->from('MyBundle:Stay', 's')
->where('s.dateDeparture IS NULL')
;
$qb
->where($qb->expr()->notIn('o.id', ':subQuery'))
->setParameter('subQuery', $subquery->getDQL())
;
產生:
WHERE o0_.id NOT IN (
SELECT s.occupant_id FROM Stay s WHERE s.date_departure IS NULL
)
但是,相反,我有這樣的:
WHERE o0_.id NOT IN (
'SELECT s.occupant FROM MyBundle:Stay s WHERE s.dateDeparture IS NULL'
)
這裏有問題:
- 子查詢被封裝在逗號
之間- SQL字段沒有從實體(居住者,dateDeparture)中的名稱轉換爲其等同的MySQL(occupant_id,date_departure)
- 使用實體名稱(MyBundle:Stay),並且不會將其轉換爲與SQL等效的逗留)
我的其他查詢完美工作,以及封裝這個主查詢。
我也嘗試使用OneToMany關係來執行此操作,因爲存在Occupant.stays關係,但我無法使其工作。
這裏是我的乘員類:
class Occupant
{
...
/**
* @ORM\OneToMany(targetEntity="EmmausBundle\Entity\Stay", mappedBy="occupant", cascade={"persist"})
* @ORM\OrderBy({"dateArrival" = "DESC"})
*/
private $stays;
...
}
而且我留類:
class Stay
{
...
/**
* @ORM\ManyToOne(targetEntity="Occupant", inversedBy="stays")
* @ORM\JoinColumn(name="occupant_id", referencedColumnName="id")
*/
private $occupant;
/**
* @var \DateTime
*
* @ORM\Column(name="date_departure", type="datetime", nullable=true)
*/
private $dateDeparture;
...
}
感謝您的幫助!
請,你的實體類添加到這個問題。如果您的實體字段名稱與數據庫中的屬性名稱不同,那麼您必須在實體類中使用註釋來將文件「連接」到正確的屬性。 – PeMaCN
我已經更新了與實體的問題 – Cryborg