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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |