2011-04-08 32 views
7

product_item_sortorder tablosundaki productIit ve toolboxItemId tablosundaki eşleşen satırı product_item tablosundan seçmeye çalışıyorum. Doctrine 2 Birden çok birleştirme ile ManyToOneColumns

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 

Takip olarak bunun için DQL yazdı: Belirli productId için olacağını Normal SQL

Sonra

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

Ben SQL aşağıdaki almak eğer çıkış $ query- > getSQL():

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 bulunmayan Gördüğünüz gibi:

012 product_item tablonun
LEFT JOIN product_item_sortorder p1_ ON p0_.productId = p1_. AND p0_.toolboxItemId = p1_. 

Detayları: product_item_sortorder tablonun

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

Detayları:

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

ProductItem Varlık

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

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

    ... 
?> 

ProductItemSortOrder Varlık

<?php 
/** 
* @Entity(repositoryClass="Repositories\ProductItemSortorder") 
* @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; 

    ... 
} 
?> 

cevap

3

Eşlemeleriniz yanlış. Her iki ucunda ManyToOne kullanıyorsunuz, bu nasıl mümkün olabilir? "Sahip olma" tarafı olarak tanımlanmış, eşlenmiş veya ters çevrilmemiş (her ikisi de İlişkilendirme Eşlemeleri) bölümüne bakın. Ve başka bir varlıktaki birçok alana eşleştirmek için bir ilişkilendirmenin birleştirme sütunlarını kullanıyorsunuz. Sanırım başka bir şey yapmak istiyorsun, tam olarak senin kullanım çantanı tarif edebilir misin? kompozit birleştirme sütunu için bu örneği

+0

bit ve altta hangi sorguyu çalıştırmak istediğimi görebilirsiniz – tom

1

: Soruyu biraz güncellenmiş

ProductItem: 
    type: entity 

    manyToOne: 
     sequence: 
      targetEntity: ProductItemSortorder 
      joinColumns: 
       productId: 
        referencedColumnName: productId 
       toolboxItemId: 
        referencedColumnName: toolboxItemId 
İlgili konular