【发布时间】:2012-01-20 08:15:42
【问题描述】:
我尝试执行这个查询
$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
和法律细节实体:
<?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 join doctrine-orm dql