2012-01-20 71 views
2

我試圖執行這個查詢學說2 JOIN錯誤

$qb = $this->_em->createQueryBuilder(); 
    $qb->select(array('c', 'ld')) 
      ->from('Model\Entity\Company', 'c') 
      ->leftJoin('c.legaldetails', 'ld') 
      ->where("c.companyid = 1"); 

    $query = $qb->getQuery(); 
    echo($query->getSQL()); 

末端具有這個SQL代碼:

SELECT ... FROM Company c0_ LEFT JOIN WHERE c0_.CompanyID = 1 

這是我的模型:

<?php  
namespace Model\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* Company 
* 
* @ORM\Table(name="Company") 
* @ORM\Entity(repositoryClass="\Model\Repository\CompanyRepository") 
*/ 
class Company 
{ 
/** 
* @var integer $companyid 
* 
* @ORM\Column(name="CompanyID", type="integer", nullable=false) 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $companyid; 

/** 
* @var \Model\Entity\LegalDetails $legaldetails 
* 
* @ORM\OneToOne(targetEntity="\Model\Entity\Legaldetails", mappedBy="companyid") 
*/ 
private $legaldetails; 

//other fields 

public function __construct() 
{ 
    $this->legaldetails = new ArrayCollection(); 
}  

//setters and getters 

和legaldetails實體:

<?php 
namespace Model\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* Legaldetails 
* 
* @ORM\Table(name="LegalDetails") 
* @ORM\Entity 
*/ 
class Legaldetails 
{ 
/** 
* @var integer $legalid 
* 
* @ORM\Column(name="LegalID", type="integer", nullable=false) 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $legalid; 

/** 
* @var \Model\Entity\Company $company 
* 
* @ORM\Column(name="CompanyID", type="integer", nullable=false) 
* @ORM\OneToOne(targetEntity="\Model\Entity\Company", inversedBy="companyid") 
* @ORM\JoinColumn(name="companyid", referencedColumnName="companyid") 
*/ 
private $company; 

有什麼不對?

P.S:據我所知,有具有相同名稱(companyid)兩個字段是一種不好的做法,但它不是我的錯

回答

2

來看對SQL操作,JOIN 什麼?你錯過了加入運算符的關鍵部分。也許,ON table.companyid=table2.companyid?在表格中使用相同的名字甚至可能是有用的,並且通常是不錯的練習。你可以在這裏放置完整的SQL運算符,將是一個更好的做法。 :-)

+0

我不明白你: -/ 我知道SQL語法。但是這個SQL代碼是由Doctrine的查詢構建器生成的。 可能是你說我的實體中的表前綴? 我試過這樣做: @ORM \ OneToOne(targetEntity =「\ Model \ Entity \ Company」,inversedBy =「company.companyid」) @ORM \ JoinColumn(name =「legaldetails.companyid」,referencedColumnName =「 「) ... @ORM \ OneToOne(targetEntity =」\ Model \ Entity \ Legaldetails「,mappedBy =」legaldetails.companyid「) 它沒有幫助 –

+0

如果我要找到問題,請原諒我發現它在我看到的地方。這次我在SQL代碼中看到它。請把它放在那裏。 2.我看到沒有ON子句的JOIN運算符。它如何工作? – Gangnus

+0

當我嘗試做這個' - > innerJoin('c.legaldetails','ld','ON','c.companyid = ld.companyid')'我有錯誤'致命錯誤:未捕獲異常'Doctrine \ ORM \ Query \ QueryException'消息'[Syntax Error] line 0,col 70:Error:期望結束字符串,得到'ON'' –