我正在用左連接的Doctrine執行DQL查詢。Symfony hidrating限制左連接的結果數
實體鉛
/**
* @ORM\Table(name="presupuestos")
* @ORM\Entity(repositoryClass="Buv\MarketplaceBundle\Repository\LeadRepository")
*/
class Lead {
/**
* @var integer $id
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var LeadPayment $leadPayment
* @ORM\OneToMany(targetEntity="LeadPayment", mappedBy="lead")
*/
private $leadPayment;
...
實體LeadPayment
/**
* Buv\MarketplaceBundle\Entity\LeadPayment
*
* @ORM\Entity
* @ORM\Table(name="presupuestos_payment")
*/
class LeadPayment {
/**
* @var integer $id
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var integer $leadId
* @ORM\Column(name="presupuesto_id", type="integer", nullable=false)
*/
private $leadId;
/**
* @ORM\ManyToOne(targetEntity="Lead", inversedBy="leadPayment")
* @ORM\JoinColumn(name="presupuesto_id", referencedColumnName="id")
*/
private $lead;
...
它實際上涉及到多個表,但我發現這個問題是與LeadPayment,所以我簡單的解釋,不要把這麼多代碼在這裏。
所以我做了以下DQL:
SELECT l, lp
FROM BuvMarketplaceBundle:Lead l
LEFT JOIN l.leadPayment lp
但是也有一些被跳過,因爲與leadPayment關係的結果。如果我評論左加入,然後我得到正確的結果(但後來需要延期加載所有記錄與leadPayment)
奇怪的是,在執行的SQL查詢執行,我看到在Symfony調試工具欄工程很好,結果是正確的。 這個問題似乎在進行中。
爲什麼你定義'$ leadId'?這可能會破壞保溼功能,因爲它與'$ lead'是多餘的,並且該列具有相同的名稱。 – tchap
@tchap我更新了phpdoc信息,因爲表和字段名稱不一樣(我在原始問題中忽略了這一點'cos我認爲如果不重要) – Sergi
您仍然不需要'$ leadId'字段。 ..你的'找不到字段'的錯誤來自其他地方。清除緩存並創建一個新的數據庫來測試你的模型,但它應該運行良好 – tchap