如何加入本机SQL查询和学说

时间:2018-06-19 13:42:18

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

我正在用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 ');

那对我不起作用

  

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

我该怎么办

1 个答案:

答案 0 :(得分:0)

使用理论,您需要围绕您的实体及其与其他实体的映射进行操作,以便像

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