【问题标题】:Doctrine 2 JOIN error教义 2 JOIN 错误
【发布时间】: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


    【解决方案1】:

    判断 SQL 运算符,JOIN ON what?您错过了连接运算符的关键部分。也许,ON table.companyid=table2.companyid?在表中使用相同的名称甚至可能很有用,而且是常见的,不错的做法。您可以将完整的 SQL 运算符放在这里,that 会是更好的做法。 :-)

    【讨论】:

    • 我不懂你的意思:-/我知道 SQL 语法。但是这个 SQL 代码是由 Doctrine 的查询生成器生成的。您可能会说我实体中的表前缀吗?我确实尝试过这样做:@ORM\OneToOne(targetEntity="\Model\Entity\Company", inversedBy="company.companyid") @ORM\JoinColumn(name="legaldetails.companyid", referencedColumnName="company.companyid" ") ... @ORM\OneToOne(targetEntity="\Model\Entity\Legaldetails", mappedBy="legaldetails.companyid") 没有帮助
    • 如果我要发现问题,请原谅,我会在我看到的地方找到它。这次我在 SQL 代码中看到了它。 1. 请把它all放在那里。 2. 我看到没有 ON 子句的 JOIN 运算符。它是如何工作的?
    • 当我尝试这样做时-&gt;innerJoin('c.legaldetails', 'ld', 'ON', 'c.companyid=ld.companyid') 我有错误Fatal error: Uncaught exception 'Doctrine\ORM\Query\QueryException' with message '[Syntax Error] line 0, col 70: Error: Expected end of string, got 'ON'
    • 所以,我们在这里找到了错误。现在让我们解决另一个问题。把它作为一个新问题,请在这里给我一个参考
    • 不客气。请把另一个问题作为一个问题 - 我想我已经找到了解决方案。
    猜你喜欢
    • 1970-01-01
    • 2013-02-18
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 2012-01-17
    • 2014-12-24
    相关资源
    最近更新 更多