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)兩個字段是一種不好的做法,但它不是我的錯
我不明白你: -/ 我知道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「) 它沒有幫助 –
如果我要找到問題,請原諒我發現它在我看到的地方。這次我在SQL代碼中看到它。請把它放在那裏。 2.我看到沒有ON子句的JOIN運算符。它如何工作? – Gangnus
當我嘗試做這個' - > innerJoin('c.legaldetails','ld','ON','c.companyid = ld.companyid')'我有錯誤'致命錯誤:未捕獲異常'Doctrine \ ORM \ Query \ QueryException'消息'[Syntax Error] line 0,col 70:Error:期望結束字符串,得到'ON'' –