【问题标题】:How to Join with Native SQL Query and doctrine如何加入原生 SQL 查询和学说
【发布时间】:2018-11-28 12:14:45
【问题描述】:

我正在使用 symfony 3.4 开发一个应用程序。我想执行一个特定的查询。所以我有两个实体:第一个是PrPurchaseRequest。第二个是PrSpecificFieldValue
PrPurchaseRequestoneToMany prSpecificFieldValues

我想获取 purchaseRequest 和 prSpecificFieldValues 的 id

我做到了

 $queryBuilder = $this->getEntityManager()->createQuery('select p.id as purchaseId, pr.keyField AS keyField,pr.ID AS prkeyvalueid from '.PrPurchaseRequest::class. ' p LEFT JOIN '. PrSpecificFieldValue::class .' spec ON p.id = spec.purchaseId ');

这对我不起作用

[语法错误] 错误:预期的字符串结尾,得到 '开'

我该怎么做

【问题讨论】:

标签: sql doctrine-orm query-builder entitymanager native-sql


【解决方案1】:

使用原则,您需要围绕您的实体及其与其他实体的映射来进行操作,以便像这样将它们关联起来

use Doctrine\Common\Collections\ArrayCollection;

/** @Entity */
class PrPurchaseRequest
{
    /**
     * 
     * @OneToMany(targetEntity="PrSpecificFieldValue", mappedBy="prPurchaseRequest")
     */
    private $prSpecificFieldValues;
    // ...

    public function __construct() {
        $this->prSpecificFieldValues = new ArrayCollection();
    }
}

/** @Entity */
class PrSpecificFieldValue
{
    /**
     *
     * @ManyToOne(targetEntity="PrPurchaseRequest", inversedBy="prSpecificFieldValues")
     * @JoinColumn(name="pr_purchase_request_id", referencedColumnName="id")
     */
    private $prPurchaseRequest;
}

现在您已经定义了实体之间的关系,您可以根据它们的映射(在 PrPurchaseRequest 类上定义的 prSpecificFieldValues)加入它们,例如

它的 DQL (DQL != SQL)

SELECT p,v
FROM PrPurchaseRequest p
JOIN p.prSpecificFieldValues v

无需指定ON 子句原则将为您处理。

One-To-Many, Bidirectional

【讨论】:

  • 感谢回复,但此查询获取所有其他连接表。但我只想要 prSpecificFieldValues
  • @Ld91 如果您不想要select p, v.keyField AS keyField,v.ID AS prkeyvalueid ..等所有数据,您可以在选择列表中引用您的属性
猜你喜欢
  • 2020-06-30
  • 2020-01-18
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
相关资源
最近更新 更多