加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

mapping – 具有多个joinColumns的Doctrine 2 ManyToOne

发布时间:2020-12-12 06:30:59 所属栏目:MsSql教程 来源:网络整理
导读:我正在尝试根据product_item表中的productId和toolboxItemId选择product_item_sortorder表中的匹配行. 在适用于给定productId的普通SQL中: SELECT pi.*,pis.* FROM product_item piLEFT JOIN product_item_sortorder pis ON pi.productId = pis.productId AN
我正在尝试根据product_item表中的productId和toolboxItemId选择product_item_sortorder表中的匹配行.

在适用于给定productId的普通SQL中:

SELECT pi.*,pis.* FROM product_item pi
LEFT JOIN product_item_sortorder pis
    ON pi.productId = pis.productId
    AND pi.toolboxItemId = pis.toolboxItemId
WHERE pi.productId = 6

我为它写了DQL如下:

$this->_em->createQuery(
    'SELECT pi
    FROM EntitiesProductItem pi
    LEFT JOIN pi.sequence s
    WHERE pi.product = ?1'
);

如果输出$query-> getSQL(),我会得到以下SQL:

SELECT p0_.id AS id0,p0_.productId AS productId1,p0_.priceGroupId AS priceGroupId2,p0_.toolboxItemId AS toolboxItemId3,p0_.levelId AS levelId4,p0_.parentId AS parentId5,p0_.productId AS productId6,p0_.toolboxItemId AS toolboxItemId7 FROM product_item p0_ LEFT JOIN product_item_sortorder p1_ ON p0_.productId = p1_. AND p0_.toolboxItemId = p1_. WHERE p0_.productId = ? ORDER BY p0_.id ASC

如您所见,找不到referencedColumnNames:

LEFT JOIN product_item_sortorder p1_ ON p0_.productId = p1_. AND p0_.toolboxItemId = p1_.

product_item表的详细信息:

+-----+-----------+---------------+
| id  | productId | toolboxItemId |
+-----+-----------+---------------+
| 467 |         1 |             3 |
| 468 |         1 |            10 |
| 469 |         1 |            20 |
| 470 |         1 |             4 |
| 471 |         1 |            10 |
+-----+-----------+---------------+

product_item_sortorder表的详细信息:

+-----+-----------+---------------+----------+
| id  | productId | toolboxItemId | sequence |
+-----+-----------+---------------+----------+
| 452 |         1 |             3 |        1 |
| 457 |         1 |             4 |        6 |
| 474 |         1 |            20 |        4 |
+-----+-----------+---------------+----------+

ProductItem实体

<?php
/**
 * @Entity(repositoryClass="RepositoriesProductItem")
 * @Table(name="product_item")
 */
class ProductItem
{
    ...

    /**
     * @ManyToOne(targetEntity="ProductItemSortorder")
     * @JoinColumns({
     *      @JoinColumn(name="productId",referencedColumnName="productId"),*      @JoinColumn(name="toolboxItemId",referencedColumnName="toolboxItemId")
     * })
     */
    protected $sequence;

    ...
?>

ProductItemSortOrder实体

<?php
/**
 * @Entity(repositoryClass="RepositoriesProductItemSortorder")
 * @Table(name="product_item_sortorder")
 */
class ProductItemSortorder
{
    ...

    /**
     * @ManyToOne(targetEntity="Product")
     * @JoinColumn(name="productId",referencedColumnName="id")
     */
    protected $product;

    /**
     * @ManyToOne(targetEntity="ToolboxItem")
     * @JoinColumn(name="toolboxItemId",referencedColumnName="id")
     */
    protected $toolboxItem;

    ...
}
?>

解决方法

检查此示例中的复合连接列
https://github.com/doctrine/doctrine2/blob/2.0.6/tests/Doctrine/Tests/Models/Navigation/NavPhotos.php

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读