gpt4 book ai didi

join - 原则 2 JOIN ON 错误

转载 作者:行者123 更新时间:2023-12-03 22:44:27 24 4
gpt4 key购买 nike

我尝试在我的 CompanyRepository 中执行此查询

$qb = $this->_em->createQueryBuilder();
$qb->select(array('c', 'ld'))
->from('Model\Entity\Company', 'c')
->leftJoin('c.legaldetails', 'ld', \Doctrine\ORM\Query\Expr\Join::ON, 'c.companyid=ld.companyid');

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

当我尝试这样做时,我遇到了错误:

fatal error :未捕获的异常 'Doctrine\ORM\Query\QueryException' 带有消息 '[Syntax Error] 第 0 行,第 69 列:错误:预期的字符串结尾,在/home/raccoon/web/freetopay.dev 中得到 'ON''/www/class/new/library/Doctrine/ORM/Query/QueryException.php 第 42 行

这些是我的模型:
<?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;

怎么了?

最佳答案

对于那些带着“预期的字符串结尾,得到 'ON'”的问题来到这里的人,但找不到正确的答案,因为我找不到(好吧,有一个答案,但不完全是关于 QueryBuilder)。一般来说,是的,您不需要指定连接列。但是如果你需要添加额外的过滤怎么办。例如,我希望添加一个额外的条件(以允许加入空值)。

这里的问题是,即使常量 Join::ON 存在(并且 Join 表达式中的注释也提到了它),但 DQL 中没有 ON。相反,应该使用 WITH (Join::WITH)。

这是我的使用示例:

$qb->leftJoin('p.metadata', 'm', Join::WITH, "IFNULL(m.name, '') = 'email'");

附言关于 IFNULL()的预测问题- 它是 Benjamin Eberlei's Doctrine extension .

关于join - 原则 2 JOIN ON 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8939148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com