我尝试执行此查询
$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)是一种不好的做法,但这不是我的错。
答案 0 :(得分:2)
判断SQL运算符,JOIN ON什么?你错过了加入运算符的关键部分。也许,ON table.companyid=table2.companyid
?在表格中使用相同的名称甚至可能是有用的,这是通常的,而不是不好的做法。您可以在这里放置完整的SQL运算符, 将是更好的做法。 : - )